Python库以数字形式生成哈希值

时间:2018-12-30 14:43:07

标签: python hash

我正在寻找一个需要对字符串进行哈希处理的库,该字符串应该是生产者编号而不是字母数字

eg:
Input string: hello world
Salt value: 5467865390
Output value: 9223372036854775808

我搜索了很多库,但是这些库产生的字母数字作为输出,但是我需要纯数字作为输出。

有没有这样的图书馆?虽然仅将数字作为输出的问题会很可能发生冲突,但是对于我的业务用例来说很好。

编辑1: 另外,我需要控制输出中的位数。我想将值存储在具有数值数据类型的数据库中。因此,我需要控制位数以适应数据类型范围内的大小

2 个答案:

答案 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