Python可以对字符串进行编码以匹配吗ASP.NET成员资格提供程序的编码密码

2024-04-26 06:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python脚本,从一个与ASP.NET的MembershipProvider。使用Python,有没有一种方法可以将十六进制字符串转换回二进制,然后进行base64编码,以某种方式将原始字符串视为Unicode。让我们试试代码。我希望重新编码一个哈希密码,这样哈希值在Python和ASP.NET/C#公司名称:

import base64
import sha
import binascii

def EncodePassword(password):
    # strings are currently stored as hex
    hex_hashed_password = sha.sha(password).hexdigest()

    # attempt to convert hex to base64
    bin_hashed_password = binascii.unhexlify(hex_hashed_password)
    return base64.standard_b64encode(bin_hashed_password)

print EncodePassword("password")
# W6ph5Mm5Pz8GgiULbPgzG37mj9g=

在ASP.NETMembershipProvider使用此方法进行编码:

^{pr2}$

这不匹配。但是,当我用ASCII编码的密码运行它时,它是匹配的,所以.NET方法的Unicode部分就是区别所在。在

W6ph5Mm5Pz8GgiULbPgzG37mj9g=

python脚本中是否有一种方法可以获得与默认.NET版本匹配的输出?在


Tags: 方法字符串import脚本密码编码netunicode
1条回答
网友
1楼 · 发布于 2024-04-26 06:33:18

这就是诀窍:

Encoding.Unicode

“Unicode”编码使微软的UTF-16LE(特别是,没有任何BOM)混淆。在散列之前将字符串编码为该字符串,您将得到正确的答案:

>>> import hashlib
>>> p= u'password'
>>> hashlib.sha1(p.encode('utf-16le')).digest().encode('base64')
'6Pl/upEE0epQR5SObftn+s2fW3M=\n'

相关问题 更多 >