获取 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);
我正在将一个为文件(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);