簡體   English   中英

使用 Utf-8 將 C# 編碼為 Python 的 SHA256 散列

[英]SHA256 Hashing with Utf-8 Encoding C# to Python

我想將此 c# 代碼轉換為 python。 我想使用 utf-8 編碼(如 c# 代碼)進行 SHA256 散列。 但是當我打印結果時,它們是不同的(結果在注釋行中)。 我想念的重點是什么?

從:

    //C# code
    string passw = "value123value";
    SHA256CryptoServiceProvider sHA256 = new SHA256CryptoServiceProvider(); 
    byte[] array = new byte[32];
    byte[] sourceArray = sHA256.ComputeHash(Encoding.UTF8.GetBytes(passw));          
    Console.WriteLine(Encoding.UTF8.GetString(sourceArray)); //J�Q�XV�@�?VQ�mjGK���2

到:

    #python code
    passw = "value123value"
    passw = passw.encode('utf8') #convert unicode string to a byte string
    m = hashlib.sha256()
    m.update(passw)
    print(m.hexdigest()) #0c0a903c967a42750d4a9f51d958569f40ac3f5651816d6a474b1f88ef91ec32
m.hexdigest()

將結果數組的值打印為十六進制數字。 打電話

Encoding.UTF8.GetString(sourceArray)

在 C# 中不會。 你可以用

BitConverter.ToString(sourceArray).Replace("-", "");

實現以下輸出:

0C0A903C967A42750D4A9F51D958569F40AC3F5651816D6A474B1F88EF91EC32

有關將數組打印為十六進制字符串的更多方法,請參閱此問題

另一方面,在 Python 中你可以這樣做

print(''.join('{:02x}'.format(x) for x in m.digest()))

此問題中描述的其他方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM