3

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

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

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

Python中有一些类比吗?

4

2 回答 2

6

Python hashlib 对象可以为您提供原始字节或十六进制摘要,具体取决于使用的方法。调用.digest()为您提供原始字节:

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

如果要获取十六进制摘要,请改用以下.hexdigest()方法

>>> hashlib.sha1(data).hexdigest()
'8843d7f92416211de9ebb963ff4ce28125932878'
于 2012-12-21T13:22:12.553 回答
0

php中

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

蟒蛇

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

解释
在 php 中,散列函数第三个参数意味着输出将以二进制模式在 python 中制作相同的东西,您必须使用方法摘要来获得相同的东西。

于 2015-01-30T22:17:39.910 回答