【问题标题】:Android and Python different SHA1 checksum of the same fileAndroid和Python同一个文件的SHA1校验和不同
【发布时间】:2013-10-29 08:15:25
【问题描述】:

剧情如下:

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

【问题讨论】:

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

标签: android python sha1 checksum sha


【解决方案1】:

原来在生成 sha1 和之前进行了一些服务器端图像编辑,这在这种情况下不应该完成。他们在服务器端进行了更改,现在效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多