我要从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
。
这些东西不在我的驾驶室中,我不确定如何继续。任何帮助表示赞赏。
答案 0 :(得分:1)
在Java中,可以使用Base8 String解码Base64 String:
byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
String decodedString = new String(decodedBytes);
答案 1 :(得分:0)
您可以使用Guava库来计算哈希。
String sha256hex = Hashing.sha256()
.hashString(originalString, StandardCharsets.UTF_8)
.toString();
Apache Commons编解码器还具有用于计算哈希的库。
String sha256hex = DigestUtils.sha256Hex(originalString);