将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= 将字

我需要帮助将以下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=
  • 将字符串转换为UTF16LE
  • 散列1的输出。使用SHA1
  • 对2的输出进行编码。使用base64编码

  • 我正在尝试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()))