【问题标题】:SHA256 hash smillar to .Net hashSHA256 哈希类似于 .Net 哈希
【发布时间】:2020-08-01 00:06:42
【问题描述】:

我正在做一个 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 代码

请帮忙

【问题讨论】:

  • 如果你只想要base64url而不需要从android上的字节数组填充检查this

标签: java android .net sha256 message-digest


【解决方案1】:

很难测试,因为你只需要弄错一件事,而哈希是完全不同的,因为它们是这样设计的。在完全正确之前,您永远不会想到“我越来越近了”。

确保在 byteArray 上使用相同的编码,使用相同的散列算法(这里的 .NET 示例是 SHA-256,而您的 Java 是 MD5)

【讨论】:

猜你喜欢
  • 2014-01-14
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2011-01-15
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
相关资源
最近更新 更多