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

时间:2012-12-21 13:10:09

标签: php python django

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

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

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

Python中是否有一些模拟?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

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中,哈希函数第三个参数意味着输出将处于二进制模式以在python中生成相同的东西,您必须使用方法摘要来获得相同的东西。