使用this code在 JavaScript 端和
Using sha As New SHA256Managed
Using memStream As New MemoryStream(Encoding.ASCII.GetBytes("Hello World!"))
Dim hash() As Byte = sha.ComputeHash(memStream)
Dim res As String = Encoding.Default.GetString(hash)
End Using
End Using
我无法使用这两位代码为相同的值重新创建相同的哈希值。
JavaScript 实现返回 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069
,VB.NET 示例返回 ƒ±eñüS¹-ÁH¡Ö]ü-K£Öw(JÝÒ mi"
.
我错过了什么?我认为这与字符编码有关?
解决方案:这是一个简单的更改:
Using sha As New SHA256Managed
Using memStream As New MemoryStream(Encoding.ASCII.GetBytes("Hello World!"))
Dim hash() As Byte = sha.ComputeHash(memStream)
Dim res As String = BitConverter.ToString(hash)
End Using
End Using
最佳答案
您将 hash
数组视为 ASCII 字符序列。您需要十六进制表示形式,可以使用 BitConverter.ToString
获得它,像这样:
Dim res As String = BitConverter.ToString(hash).Replace("-", "").ToLower();
关于c# - JavaScript 哈希和等效的 .NET 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849518/