0

シナリオは次のとおりです。

サーバーに画像をアップロードしたい。ただし、ファイルをアップロードする前に、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ですか?

4

1 に答える 1

0

sha1このシナリオでは意図されていない合計を生成する前に、サーバー側の画像編集がいくつかあったことが判明しました。彼らはサーバー側で変更を加え、今では完全に機能しています。

于 2013-11-28T12:32:44.750 に答える