-1

我需要帮助将以下 PHP 转换为 python

$plaintext = "MyPassword";
$utf_text = mb_convert_encoding( $plaintext, 'UTF-16LE' );
$sha1_text = sha1( $utf_text, true );
$base64_text = base64_encode( $sha1_text );
echo $base64_text; //ouput = QEy4TXy9dNgleLq+IEcjsQDYm0A=
  1. 将字符串转换为 UTF16LE
  2. 散列 1. 的输出。使用 SHA1
  3. 使用 base64 编码对 2. 的输出进行编码。

我正在尝试 hashlib.sha1 但它不起作用。也许是因为这个,也许是编码。谁能帮忙

4

3 回答 3

4

您的 PHP 代码将密码编码为 UTF16,小端;如果您的密码值是 unicode 值,则在 Python 中可以正常工作:

>>> import hashlib
>>> plaintext = u"MyPassword"
>>> utf_text = plaintext.encode('UTF-16LE')
>>> hashlib.sha1(utf_text).digest().encode('base64')
'QEy4TXy9dNgleLq+IEcjsQDYm0A=\n'

上述会话是在 Python 2 中完成的;在 Python 3 中,u前缀可以省略,因为所有字符串值都是 Unicode。

于 2013-08-08T13:54:24.763 回答
0

明白了,我错误地使用了 hashlib.sha1。

import hashlib

password = "MYPASSWORD"
result ='QEy4TXy9dNgleLq+IEcjsQDYm0A='

utftext = password.encode("utf-16LE")
m = hashlib.sha1()
m.update(utftext)
sha1text = m.digest()
output = sha1text.encode('base64','strict')
print "output: %s" % output
print "expect: %s" % result
于 2013-08-08T13:54:52.440 回答
0

我不明白为什么这行不通。这就像一个魅力并打印出所需的结果,QEy4TXy9dNgleLq+IEcjsQDYm0A=

from hashlib import sha1
from base64 import b64encode

print(b64encode(sha1("MyPassword".encode("utf-16le")).digest()))
于 2013-08-08T13:55:51.990 回答