获取 Java 和 C# 之间的匹配校验和

Get matching checksums between Java and C#

我正在将一个为文件(base64 编码)创建校验和的方法从 C# 应用程序移植到 Java。在 C# 中,这是方法:

public static string GetChecksum(byte[] bytes)
{
    using (var stream = new MemoryStream(bytes))
    {
      var sha = new SHA256Managed();
      byte[] checksum = sha.ComputeHash(stream);
      return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}

这是我目前在 Java 中的内容,但它绝对不匹配从 C# 返回的值:

private static String getCheckSum(String base64Data) throws Exception {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(base64Data.getBytes("UTF-8"));
        byte[] enc = md.digest();

        StringBuilder sb = new StringBuilder();
        for (byte b : enc) {
            sb.append(String.format("%02x", b));
        }

        return sb.toString().replace("-", "").toUpperCase();
    }

我试过 getBytes() 方法中没有字符集,我试过使用字符集 US-ASCII

这些东西不在我的驾驶室内,我不确定如何进行。感谢任何帮助。

您可以使用 Guava 库来计算哈希值。

String sha256hex = Hashing.sha256()
  .hashString(originalString, StandardCharsets.UTF_8)
  .toString();

Apache commons 编解码器也有计算散列的库。

String sha256hex = DigestUtils.sha256Hex(originalString);

在Java解码Base64字符串你有这个(自Java8):

byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
String decodedString = new String(decodedBytes);

来自 : https://www.baeldung.com/java-base64-encode-and-decode