这是我的代码,我不知道它为什么会在控制台中产生奇怪的代码
(输出是" b5?2 ??????????????????? ??? ??? ??? ??? ??? ??? ??? ??? \ ??%?? A)_ ??? J&#34?;没有引号)
Private Sub TestSHA512()
Dim key As String = "635357773463315343"
Dim pass As String = "somepasswd"
Dim enc As System.Text.Encoding = New System.Text.ASCIIEncoding
Dim keyBytes() As Byte = enc.GetBytes(key)
Dim passBytes() As Byte = enc.GetBytes(pass)
Dim SHA As New HMACSHA512(keyBytes)
Dim resultBytes() As Byte = SHA.ComputeHash(passBytes)
Console.WriteLine(enc.GetString(resultBytes))
Console.WriteLine(enc.GetString(SHA.Hash)) 'same...
End Sub
答案 0 :(得分:5)
首先,SHA512是一种哈希算法,而不是加密方案,因此如果您尝试加密,那么SHA512就不是这样做的了。您需要查看加密类,例如AesManaged
。
ComputeHash
将计算的哈希作为字节数组。您正在使用ASCIIEncoding.GetString
将其转换为字符串,但并非每个字节都是可打印的ASCII字符。那就是你看到???的原因控制台输出中的字符。
如果您询问如何将哈希输出显示为可打印字符串,请使用Convert.ToBase64String
,它将使用base64编码将字节数组转换为字符串。如果您期望它以十六进制表示,则可以遍历字节数组并打印每个字节的Hex()
值。