2012-12-21 74 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中做相同的事情,您必須使用方法摘要來獲得相同的結果。