如何解决使用Utf-8将C#编码为Python的SHA256哈希
我想将此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
有关将数组打印为十六进制字符串的更多方法,请参见this question。
另一方面,在Python中,您可以像这样
print(''.join('{:02x}'.format(x) for x in m.digest()))
或其他类似this question中所述的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。