创建一个不可变(加密?)的字符串,每次运行 python 程序时都相同

问题描述 投票:0回答:1

我有一列(我们称之为 STR),其中的字符串值不会改变。例如但随着时间的推移会收到新的价值:

力量
abc123
efg456
hij789

我想创建一个列,上面列中的每个字符串值都附有一个数值。该数值不应在每次程序运行时更改,并且长度应保持一致(例如,每个长度应为 7 位)。示例输出:

力量 ID
abc123 0125699
efg456 6589455
hij789 0995525

假设额外的值被添加到 STR 列并且我不得不重新运行代码,我希望现有生成的 ID 值保持不变,但额外的 STR 值接收新生成的 ID。例如:

力量 ID
abc123 0125699
efg456 6589455
hij789 0995525
klm101 0555989
nop558 5595959

我试过使用哈希函数,但每次程序运行时这似乎都会改变:

def generate_id(s): 返回 abs(哈希(s)) % (15 ** 15)

df['ID'] = df['STR'].apply(generate_id)

关于如何实现所需输出的任何建议?在多次执行程序后似乎找不到一致的解决方案。这样做的最终目标是创建一个 ID 值,该值可以识别 STR 列,而不会在许多不同的数据帧中泄露它的值。谢谢!

python python-3.x encryption hash
1个回答
0
投票

对于数值,您可以创建一个函数对其进行哈希处理,获取十六进制,然后使用

int(s, base=16)
获取数值。所以,代码会变成

import hashlib

def numericvalue_from_string(s):
    h = hashlib.new('sha1') #for shortest results with sha, if you are ok with big numbers then sha256 or sha512 also work.
    h.update(s.encode())
    hx = h.hexdigest()
    return int(hx, base=16)

所以如果我运行

numericvalue_from_string('m')
它将产生
611156256285597126173522716470136971498835711720
(sha1)

© www.soinside.com 2019 - 2024. All rights reserved.