在Python中模拟PHP的sha1原始输出

2024-06-16 09:34:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Django做一个电子商店。我正在尝试使用http://liqpay.com/添加在线支付。它们在PHP中有示例:https://liqpay.com/?do=pages&p=cnb12。在

在这个例子中,他们使用PHP的shal($data, 1)标志1(然后sha1摘要以原始二进制格式返回,长度为20)。在

但是Python函数hashlib.sha1()没有这个标志。在

Python中有类似的东西吗?在


Tags: djangohttpscomhttp示例标志pagesdo
2条回答

php中

$hash = hash("sha1", "something", true)
echo base64_encode($hash)
'GvF+c3IdvgxAARuC7Uuxp9vjzik='

在python中

from hashlib import sha1
sha1("something").digest().encode("base64")
'GvF+c3IdvgxAARuC7Uuxp9vjzik=\n'

说明
在php中,散列函数third param意味着输出将以二进制模式在python中生成相同的结果,您必须使用digest方法来获得相同的结果。在

Python hashlib对象可以提供原始字节或十六进制摘要,具体取决于使用的方法。调用^{}将得到原始字节:

>>> import hashlib
>>> data = 'foobar'
>>> hashlib.sha1(data).digest()
'\x88C\xd7\xf9$\x16!\x1d\xe9\xeb\xb9c\xffL\xe2\x81%\x93(x'
>>> len(hashlib.sha1(data).digest())
20

如果要获取十六进制摘要,请改用^{} method

^{pr2}$

相关问题 更多 >