То, что я пытаюсь сделать, это прочитать из текстового файла, где каждая строка имеет путь к файлу, а затем место для разделителя и хеш, который его сопровождает. Поэтому я вызываю checkVersion (), а loadStrings (File f_) возвращает String [], по одному месту для каждой строки. Однако, когда я пытаюсь проверить хэши, я получаю что-то, что даже не является шестнадцатеричным и в два раза длиннее, чем должно быть, вероятно, что-то очевидно, что мои глаза просто пропускают. За этим стоит автоматическое обновление моей игры для экономии трафика, спасибо за ваше время.
Код исправлен, вот окончательная версия, если у кого-то еще есть эта проблема, всем большое спасибо.
void checkVersion() {
String[] v = loadStrings("version.txt");
for(int i=0; i<v.length; i++) {
String[] piece = split(v[i], " "); //BREAKS INTO FILENAME, HASH
println("Checking "+piece[0]+"..."+piece[1]);
if(checkHash(piece[0], piece[1])) {
println("ok!");
} else {
println("NOT OKAY!");
//CONTINUE TO DOWNLOAD FILE AND THEN CALL CHECKVERSION AGAIN
}
}
}
boolean checkHash(String path_, String hash_) {
return createHash(path_).equals(hash_);
}
byte[] messageDigest(String message, String algorithm) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance(algorithm);
md.update(message.getBytes());
return md.digest();
} catch(java.security.NoSuchAlgorithmException e) {
println(e.getMessage());
return null;
}
}
String createHash(String path_) {
byte[] md5hash = messageDigest(new String(loadBytes(path_)),"MD5");
BigInteger bigInt = new BigInteger(1, md5hash);
return bigInt.toString(16);
}