这是我的代码,我不知道为什么它会在控制台中生成一个奇怪的代码
(输出是"b5?2 ?????????????????????????????????????????????? _ ??? J·" 没有引号)
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
Run Code Online (Sandbox Code Playgroud)
首先,SHA512是一种哈希算法,而不是加密方案,因此如果您尝试加密,那么SHA512就不是这样做的了.您需要查看加密类,例如AesManaged.
ComputeHash给出计算的散列作为字节数组.您正在使用ASCIIEncoding.GetString它将其转换为字符串,但并非每个字节都是可打印的ASCII字符.那就是你看到???的原因 控制台输出中的字符.
如果您询问如何将哈希输出显示为可打印字符串,请使用Convert.ToBase64String,这将使用base64编码将字节数组转换为字符串.如果您期望它以十六进制表示,则可以遍历字节数组并打印Hex()每个字节的值.