在Android应用程序中验证由Python生成的图片的md5摘要

2024-05-16 08:47:03 发布

您现在位置:Python中文网/ 问答频道 /正文

所以几天前,我问this question这里关于从android.graphics.Bitmap对象。用户Leonidos是一个很大的帮助,他建议的方法有效。但是我之前用同一张图片生成的md5求和给出了一个不同的和。在

我使用的Android代码如下: 在

public String md5ForBitmap(Bitmap bitmap)
{
    String hash = "";
    try
    {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] bitmapBytes = stream.toByteArray();

        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.update(bitmapBytes);
        byte[] digestedBytes = messageDigest.digest();

        BigInteger intRep = new BigInteger(1, digestedBytes);
        hash = intRep.toString(16);
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
    return hash;
}

python脚本如下所示: 在

^{pr2}$

Android应用程序从服务器接收一个json字符串,该字符串包含指向图像的url和md5总和。md5和已经预先用python脚本计算过了。图像下载后,我只剩下一个位图对象,然后在应用程序中使用。在

Leonidos建议位图对象的处理方式与python处理图像数据的方式不同,我需要在Android中找到原始图像数据的md5和。对我来说,这是一个非常合理的解释。只是我真的很迷惘当这一切发生的时候。在

那么正确的方法是什么呢?在


Tags: 对象方法图像newstreamstringhashmd5
1条回答
网友
1楼 · 发布于 2024-05-16 08:47:03

好吧,这只是一个有根据的猜测,但对我来说很明显,如果你想获得与未压缩文件相同的MD5哈希值,就不应该使用JPEG压缩位图。在

{你也可以使用python}来调整你的代码。使用PIL很容易。在

bitmap类在内部可能只是一个未压缩的像素缓冲区,因此您甚至无法从中获取原始文件内容。使用哈希的实际像素值可以避免所有问题,只要bitmap类和PIL都以相同的方式解压缩原始文件(这似乎很有可能)。在

相关问题 更多 >