我正在寻找一个需要对字符串进行哈希处理的库,该字符串应该是生产者编号而不是字母数字
eg:
Input string: hello world
Salt value: 5467865390
Output value: 9223372036854775808
我搜索了很多库,但是这些库产生的字母数字作为输出,但是我需要纯数字作为输出。
有没有这样的图书馆?虽然仅将数字作为输出的问题会很可能发生冲突,但是对于我的业务用例来说很好。
编辑1: 另外,我需要控制输出中的位数。我想将值存储在具有数值数据类型的数据库中。因此,我需要控制位数以适应数据类型范围内的大小
答案 0 :(得分:3)
十六进制哈希码可以解释为(相当大的)数字:
import hashlib
hex_hash = hashlib.sha1('hello world'.encode('utf-8')).hexdigest()
int_hash = int(hex_hash, 16) # convert hexadecimal to integer
print(hex_hash)
print(int_hash)
输出
'2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
243667368468580896692010249115860146898325751533
编辑:如注释中所述,要将数字限制在一定范围内,您可以简单地使用模数运算符。当然,请注意,这将增加发生碰撞的可能性。例如,我们可以将“哈希”限制为0 .. 9,999,999,模数为10,000,000。
limited_hex_hash = hex_hash % 10_000_000
print(limited_hex_hash)
输出
5751533
答案 1 :(得分:-3)
我认为不需要图书馆。您可以使用python中的hash()
函数来简单地完成此操作。
InputString="Hello World!!"
HashValue=hash(InputString)
print(HashValue)
print(type(HashValue))
输出:
8831022758553168752
<class 'int'>
基于最新修改的解决方案:
上述方法是最简单的解决方案,更改每次调用的哈希值将有助于我们防止攻击者篡改应用程序。
如果您想关闭随机设置,只需分配
PYTHONHASHSEED to zero
。
有关关闭随机化的信息,请查看官方文档https://docs.python.org/3.3/using/cmdline.html#cmdoption-R