Java和vb.net中的SHA-256不同值

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

重新开始不是一个选项,因为已经运行的项目使用SHA-256

下面是java代码-->>>>只是一个简单的代码,可以散列任何字符串

    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”);