将PHP转换为Python
我需要帮助将以下PHP转换为python将PHP转换为Python,python,hash,sha1,Python,Hash,Sha1,我需要帮助将以下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= 将字
$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=
我正在尝试hashlib.sha1,但它不起作用。可能是因为这个,可能是编码。有人能帮忙吗您的PHP代码将密码编码为UTF16,little endian;如果密码值是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中完成的;在Python3中,
u
前缀可以省略,因为所有字符串值都是Unicode。明白了,我不正确地使用了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
我不明白这为什么行不通。这就像一个符咒,并打印出所需的结果QEy4TXy9dNgleLq+IEcjsQDYm0A=
但它不工作并不是一个错误描述。您尝试了什么代码,输出了什么,您希望发生什么?我的密码值是unicode格式的-所以我不需要那个步骤-谢谢。@马克:因为您没有共享您的原始代码,否则我们无法指出您的错误所在。
from hashlib import sha1
from base64 import b64encode
print(b64encode(sha1("MyPassword".encode("utf-16le")).digest()))