提问者:小点点

用Utf-8编码C#到Python的SHA256哈希


我想把这个C#代码转换成Python。我想像C#代码那样用utf-8编码做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

共1个答案

匿名用户

m.hexdigest()

将结果数组的值打印为十六进制数字。呼叫

Encoding.UTF8.GetString(sourceArray)

在C#中不会。你可以用

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

以实现以下输出:

null

null

null

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

null