来自contentresolver inputstream的Android MD5哈希

时间:2016-04-27 09:44:47

标签: android md5

我正在尝试从我的Android应用程序上传文件到我的服务器,并确保它已正确完成我想添加MD5哈希。要上载的文件由content:// Uri引用。我使用下面的代码来计算我的Android设备上的MD5哈希值,以及我的服务器上稍微不同的代码(请参阅代码中的注释)。现在问题是这两个没有给出相同的结果。我使用了一些第三方软件,我服务器上的MD5哈希实际上是正确的。我该如何解决这个问题?

public static String calculateMD5(Context context, Uri fileUri) {
    MessageDigest digest;
    try {
        digest = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
        Log.e(LOG_TAG, "Exception while getting digest", e);
        return null;
    }

    InputStream is;
    try {
        is = context.getContentResolver().openInputStream(fileUri);
        // is = new FileInputStream("some_file_location");
    } catch (FileNotFoundException e) {
        Log.e(LOG_TAG, "Exception while getting FileInputStream", e);
        return null;
    }

    byte[] buffer = new byte[8192];
    int read;
    try {
        while ((read = is.read(buffer)) > 0) {
            digest.update(buffer, 0, read);
        }
        byte[] md5sum = digest.digest();

        // Create Hex String
        StringBuilder hexString = new StringBuilder();
        for (byte aMessageDigest : md5sum) {
            String h = Integer.toHexString(0xFF & aMessageDigest);
            while (h.length() < 2)
                h = "0" + h;
            hexString.append(h);
        }
        return hexString.toString();
    } catch (IOException e) {
        throw new RuntimeException("Unable to process file for MD5", e);
    } finally {
        try {
            if (is != null) {
                is.close();
            }
        } catch (IOException e) {
            Log.e(LOG_TAG, "Exception on closing MD5 input stream", e);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用它来获取哈希值

#include "linked.h"