Java SHA256散列到.Net散列

Java SHA256散列到.Net散列,java,android,.net,sha256,message-digest,Java,Android,.net,Sha256,Message Digest,我正在做一个Oauth应用程序,其中有几个部分是通过.Net应用程序计算哈希值的,下面是计算哈希值的.Net代码 public static string GetBase64CodeChallange(string str) { using (SHA256 sha256Hash = SHA256.Create()) { byte[] challengeBytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(str

我正在做一个Oauth应用程序,其中有几个部分是通过.Net应用程序计算哈希值的,下面是计算哈希值的.Net代码

public static string GetBase64CodeChallange(string str)
{
    using (SHA256 sha256Hash = SHA256.Create())
    {
        byte[] challengeBytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(str));

        string s = Convert.ToBase64String(challengeBytes);
        s = s.Split('=')[0];
        s = s.Replace('+', '-');
        s = s.Replace('/', '_');
        return s;
    }
}
我想要一个类似的android版本。我在网络上进行了研发,但还没有相同的解决方案。遵循产生不同结果的java代码。android版本字符串需要与.Net版本相同

String str1 = "str";
            String outHash = "95e5f0b6988ec703e832172f70ce7dc7";
            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] array = md.digest(str1.getBytes("UTF-8"));
                StringBuilder sb = new StringBuilder();
                for (byte b : array) {
                    sb.append(String.format("%02X", b));
                }
                System.out.println(sb.toString());
                System.out.println(sb.toString().equalsIgnoreCase(outHash));
            } catch (Exception e) {
                e.printStackTrace();
            }
Android-Java代码


请帮助

这很难测试,因为您只需要弄错一件事,而散列是完全不同的,因为它们是这样设计的。你永远不会认为我离你越来越近了,直到它完全正确


请确保您在byteArray上使用相同的编码,使用相同的哈希算法。这里的.NET示例是SHA-256,Java示例是MD5

如果您只想在android上使用base64url而不使用字节数组填充,请检查下面的两个小提琴