Сценарий следующий:
Я хочу загрузить изображение на сервер. Но перед загрузкой файла я должен отправить контрольную сумму SHA1
этого файла, чтобы сервер мог проверить, загружен ли файл, чтобы я не загружал его снова.
Проблема в том, что для одного и того же файла я не получаю одинаковую контрольную сумму SHA1
в своем приложении и на стороне сервера.
Вот код в моем приложении для Android:
public static String getSHA1FromFileContent(String filename)
throws NoSuchAlgorithmException, IOException {
final MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
InputStream is = new BufferedInputStream(new FileInputStream(filename));
final byte[] buffer = new byte[1024];
for (int read = 0; (read = is.read(buffer)) != -1;) {
messageDigest.update(buffer, 0, read);
}
is.close();
// Convert the byte to hex format
Formatter formatter = new Formatter();
for (final byte b : messageDigest.digest()) {
formatter.format("%02x", b);
}
String res = formatter.toString();
formatter.close();
return res;
}
А вот код на стороне сервера:
def hashFile(f):
sha1 = hashlib.sha1()
if hasattr(f, 'multiple_chunks') and f.multiple_chunks():
for c in f.chunks():
sha1.update(c)
else:
try:
sha1.update(f.read())
finally:
f.close()
return sha1.hexdigest()
В чем проблема и почему я получаю разные SHA1
контрольные суммы?