#java #mysql #hash
#java #mysql #хэш
Вопрос:
Я хотел бы получить хэш файлов (в основном видеофайлов) независимо от внешних свойств, таких как путь и имя файла. Мне нужно будет сохранить хэш в базе данных и сравнить хэш файла, чтобы найти идентичные файлы.
Комментарии:
1. Вы можете заставить хэш-функцию зависеть от чего угодно, включая «внешние свойства» или нет. Что такого в написании такой функции, чего вы не понимаете?
Ответ №1:
Взгляните на DigestInputStream
класс: http://docs.oracle.com/javase/7/docs/api/java/security/DigestInputStream.html
Ответ №2:
public byte[] digestFile( File f ){
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
FileInputStream fis = new FileInputStream( f );
byte[] buffer = new byte[1024];
int read = -1;
while ((read = fis.read(buffer)) != -1) {
messageDigest.digest(buffer, 0, read);
}
return messageDigest.digest();
} catch (VariousExceptions e) {
//handle
}
}
Ответ №3:
В зависимости от того, что вам нужно, вы можете сделать это довольно легко, используя классы файлов Guava и байтовых потоков:
byte[] digest = Files.getDigest(file, MessageDigest.getInstance("SHA"));