Java和C#之间不同的MD5

斯蒂法诺·维里希(Stefano Vuerich)

我想比较来自同一文件的MD5哈希。该文件通过Android上的HTTP POST以byte []的形式发送,在这里我也计算哈希值,并从.NET服务器接收,在其中我再次计算哈希值,然后想比较它们。

问题是对于同一文件,我得到不同的哈希值...

Java代码

FileInputStream fileInputStream = null;

byte[] bFile = new byte[(int) file.length()];

try {

    fileInputStream = new FileInputStream(file);
    fileInputStream.read(bFile);

} catch (Exception e) {
    e.printStackTrace();
}

try {
    MessageDigest md = MessageDigest.getInstance("MD5");

    int read = 0;
    while((read = fileInputStream.read(bFile)) != -1) {
        md.update(bFile, 0, read);
    }
    fileInputStream.close();

    byte[] mdBytes = md.digest();

    StringBuffer sb = new StringBuffer();
    for(int i=0; i < mdBytes.length; ++i) {
        sb.append(Integer.toString((mdBytes[i] & 0xff) + 0x100, 16).substring(1));
    }

    // generated MD5 is d41d8cd98f00b204e9800998ecf8427e


} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

C#代码

using (var md5 = MD5.Create())
{
    using (var stream = File.OpenRead(filePath))
    {
        string hexString = ToHex(md5.ComputeHash(stream), false);

        // Generated MD5 is d167df114a478809ef71fb7e10c40f8c
    }
}

public string ToHex(byte[] bytes, bool upperCase)
{
    StringBuilder result = new StringBuilder(bytes.Length * 2);

    for (int i = 0; i < bytes.Length; i++)
        result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));

    return result.ToString();
}

更新

我试图将Java代码更改为

StringBuffer sb = new StringBuffer();
for(int i=0; i < mdBytes.length; ++i) {
    sb.append(String.format("%02x", mdBytes[i]));
}

结果总是一样的...

米海·卡拉科斯

读取文件流后,必须返回到流的开头才能正确计算哈希值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MD5在C#和Java之间生成不同的结果

来自分类Dev

DigestUtils和MessageDigest之间的MD5结果不同

来自分类Dev

PHP 和 C# 中不同的 MD5 哈希值

来自分类Dev

md5(stringa + stringb ...)和md5(stringa)+ md5(stringb)之间的碰撞机会有何不同?

来自分类Dev

为什么C#和Java应用程序为同一文件计算不同的MD5值?

来自分类Dev

MD5哈希在IOS和Windows中相同,但在Java中不同

来自分类Dev

MD5结果不同

来自分类Dev

C#中大文件的容错MD5计算

来自分类Dev

C#客户端上的php md5密码

来自分类Dev

如何异步MD5计算?C#

来自分类Dev

使 PHP md5 哈希匹配 C# 哈希

来自分类Dev

MD5哈希值不同

来自分类Dev

MD5散列不同的值

来自分类Dev

MD5库的结果不同

来自分类Dev

将C ++ md5编码转换为android / java

来自分类Dev

C#MD5和PHP MD5不是马赫

来自分类Dev

C#MD5哈希与Java / PHP MD5哈希不匹配

来自分类Dev

Java MD5编码器与C#MD5CryptoServiceProvider不匹配

来自分类Dev

SQL Server和PostgreSQL之间的MD5值不匹配

来自分类Dev

为什么MD5寄存器的标准和程序不同?

来自分类Dev

为什么文件的gzip版本会产生不同的md5校验和

来自分类Dev

MD5哈希值不同于Bash和PHP

来自分类Dev

输入流的MD5校验和

来自分类Dev

awk和md5:替换列

来自分类Dev

linux和python中的md5

来自分类Dev

MD5校验和不匹配

来自分类Dev

MD5校验和不匹配

来自分类Dev

awk和md5:替换列

来自分类Dev

在Java中尝试MD5哈希