Android和Python在同一文件中使用不同的SHA1校验和

Android和Python在同一文件中使用不同的SHA1校验和,android,python,sha1,checksum,sha,Android,Python,Sha1,Checksum,Sha,下一个场景是: 我想上传图像到服务器。但是在上传文件之前,我必须发送该文件的SHA1校验和,以便服务器可以检查文件是否已经上传,这样我就不会再上传了 问题是,对于同一个文件,我的应用程序和服务器端没有得到相同的SHA1校验和 以下是我的Android应用程序中的代码: public static String getSHA1FromFileContent(String filename) throws NoSuchAlgorithmException, IOException {

下一个场景是:

我想上传图像到服务器。但是在上传文件之前,我必须发送该文件的
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
校验和?

结果是,在生成
SHA1
校验和之前,服务器端进行了一些图像编辑,这在这种情况下是不应该做的。他们在服务器端进行了更改,现在工作正常。

如何在服务器端打开文件?可能您需要以二进制模式打开,以避免行结束转换。我不编写服务器端代码,但我得到的答案是,这已经得到了处理:)而且它们从javascript生成相同的SHA1也没有问题