3

Django を使用して e ショップを作成しています。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オブジェクトは、使用されるメソッドに応じて、rawバイトまたは16進ダイジェストのいずれかを提供できます。呼び出す.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

16進ダイジェストを取得する場合は、代わりに次の.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 では、ハッシュ関数の 3 番目のパラメーターは、Python で同じものを作成するために出力がバイナリ モードになることを意味します。同じものを取得するには、メソッド ダイジェストを使用する必要があります。

于 2015-01-30T22:17:39.910 に答える