Я портирую метод, который создает контрольную сумму для файла (в кодировке 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
.
Этого материала нет в моей рубке, и я не знаю, как поступить. Любая помощь приветствуется.