1
我正在使用Python腳本從現有系統創建類似於ASP.NET的MembershipProvider的散列字符串。使用Python,有沒有辦法獲取一個十六進制字符串並將其轉換回二進制文件,然後執行base64編碼,以某種方式將原始字符串視爲Unicode。讓我們嘗試一些代碼。我期待重新編碼散列密碼,這樣的哈希值將是Python和ASP.NET/C#等於:Python可以編碼字符串以匹配ASP.NET成員資格提供程序的EncodePassword
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.NET的MembershipProvider用戶這個方法來進行編碼:
static string EncodePassword(string pass)
{
byte[] bytes = Encoding.Unicode.GetBytes(pass);
//bytes = Encoding.ASCII.GetBytes(pass);
byte[] inArray = null;
HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
inArray = algorithm.ComputeHash(bytes);
return Convert.ToBase64String(inArray);
}
string s = EncodePassword("password");
// 6Pl/upEE0epQR5SObftn+s2fW3M=
那不匹配。但是,當我使用以ASCII編碼編碼的密碼運行它時,它會匹配,所以.NET方法的Unicode部分有什麼不同。
W6ph5Mm5Pz8GgiULbPgzG37mj9g =
有沒有在python腳本的方式來獲得一個輸出相匹配的默認.NET版本?
謝謝,這是很好的信息。我可能不夠清楚,但是這可以應用於已經哈希的密碼嗎?如果python中的原始密碼沒有以這種方式編碼,那麼我可能沒有辦法讓它退出來應用utf-16le編碼。那有意義嗎? – RyanW 2009-09-22 06:52:18
事實上,一旦哈希,你永遠不會收回它。 – bobince 2009-09-22 12:40:47