0
該場景是下一個:Android和Python不同的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
校驗?
如何打開服務器端的文件?可能你需要以二進制模式打開,以避免線端轉換 – Ber
我不寫服務器端代碼,但我得到的答案是,這已經處理:)另外,他們沒有問題,從JavaScript生成相同的SHA1 – nikmin