Java和vb.net中的SHA-256不同值
重新开始不是一个选项,因为已经运行的项目使用SHA-256 下面是java代码-->>>>只是一个简单的代码,可以散列任何字符串Java和vb.net中的SHA-256不同值,java,vb.net,sha256,Java,Vb.net,Sha256,重新开始不是一个选项,因为已经运行的项目使用SHA-256 下面是java代码-->>>>只是一个简单的代码,可以散列任何字符串 public static String SHA256 (String text) throws NoSuchAlgorithmException, UnsupportedEncodingException { textByte = text.getBytes("UTF-8"); MessageDigest md = MessageDiges
public static String SHA256 (String text) throws NoSuchAlgorithmException, UnsupportedEncodingException
{
textByte = text.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("SHA-256");
textByte = md.digest(textByte);
return Base64.encodeToString(textByte,Base64.NO_CLOSE);
}
和VB代码如下
Public Function EncryptPassword(ByVal password As String) As String
Dim hashedPassword As String = Nothing
Dim hashProvider As SHA256Managed = Nothing
Try
Dim passwordBytes() As Byte
passwordBytes = System.Text.Encoding.Unicode.GetBytes(password)
hashProvider = New SHA256Managed
hashProvider.Initialize()
passwordBytes = hashProvider.ComputeHash(passwordBytes)
hashedPassword = Convert.ToBase64String(passwordBytes)
Catch ex As Exception
Finally
If Not hashProvider Is Nothing Then
hashProvider.Clear()
hashProvider = Nothing
End If
End Try
Return hashedPassword
End Function
这可能不是唯一的问题,但是VB中的System.Text.Encoding.Unicode是UTF-16LE,因为您的Java代码使用UTF-8。不确定这是否导致了您的问题,但是Java中的“byte”是有符号的,因此它相当于VB中的“SByte”,而不是“byte”。非常感谢!现在可以了!对于任何有同样窃听问题的人。。。更改textByte=text.getBytes(“UTF-8”);TO textByte=text.getBytes(“UTF-16LE”);