У меня есть точки данных, которые я перебираю и хэширую. Я использую Java-реализацию SHA-512 для хэширования моих данных. Хеш должен создавать строку из 128 символов, но иногда он создает строку из 127 символов, что приводит к тому, что мой код имеет исключения за пределами границ.
Код обычно создает неправильный хэш длины 1 из каждых 20 различных вычисленных хешей.
Это код, который я использую для реализации хэша, который
https://www.geeksforgeeks.org/sha-512-hash-in-java/
public static String SHA512(String input)
{
try {
// getInstance() method is called with algorithm SHA-512
MessageDigest md = MessageDigest.getInstance("SHA-512");
// digest() method is called
// to calculate message digest of the input string
// returned as array of byte
byte[] messageDigest = md.digest(input.getBytes());
// Convert byte array into signum representation
BigInteger no = new BigInteger(1, messageDigest);
// Convert message digest into hex value
String hashtext = no.toString(16);
// Add preceding 0s to make it 32 bit
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
// return the HashText
return hashtext;
}
// For specifying wrong message digest algorithms
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
Вот хэш правильной длины (128 символов), полученный с помощью кода, указанного выше:
ca36f8a40a6211d49e77f84ca37182813fba853fba732e29d18414c739b85f856fd3af702a2cd23174eeaedf2d99a044b0ae0ddea17de7bbb33e3b62cfec5236
Вот хэш неправильной длины (127 символов), созданный кодом, указанным выше:
d2d3cb7a7f60a0fd673c86fb82eb515c4f2f40f0308df7b3c838b78c510125967191ad9afe0e4f8e5fb59ed190bc6652d3e4805c886fc1e62213a3284cca661