2012-12-21 75 views
2

我正在使用Django来创建一个电子商店。我正在尝试使用http://liqpay.com/添加在线支付。他们在PHP中有示例:https://liqpay.com/?do=pages&p=cnb12Python的sha1原始输出的模拟

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

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

在Python中是否有一些模拟?

+1

您是否试图查找该标志实际上做了什么?有机会,你可以通过在python中传递适当的函数来在PHP触发器中应用任何转换标志。 – GordonM

回答

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() method代替:

>>> hashlib.sha1(data).hexdigest() 
'8843d7f92416211de9ebb963ff4ce28125932878' 
+0

谢谢你的男人。这是我需要/ – user854029

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中做相同的事情,您必须使用方法摘要来获得相同的结果。