比较 android(java) 和 c# 中的 md5 哈希

发布于 2024-10-17 13:02:29 字数 1151 浏览 4 评论 0原文

我同时在 android 和 c# 中进行 md-5 哈希。但对于相同的输入,两个结果应该是相同的。两种语言的完成方式有什么不同吗?

在这两种情况下我得到不同的输出。这是 md-5 计算的 c# 代码:

//this method hashes the values sent to it using MD5
public static String hashwithmd5(String toHashMD5)
{
    byte[] keyArray;

    MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
    keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(toHashMD5));
    hashmd5.Clear();
    return Convert.ToBase64String(keyArray, 0, keyArray.Length); 
}

这是 android 中使用 bouncycastle 的 md5 代码

public byte[] Hashing(String toHash) throws Exception{
    byte[] hashBytes = toHash.getBytes("UTF-8");
    EditText et = (EditText) findViewById(R.id.entry);
    org.bouncycastle.crypto.digests.MD5Digest digest = new org.bouncycastle.crypto.digests.MD5Digest();
    digest.reset();
    digest.update(hashBytes, 0, hashBytes.length);
    int length = digest.getDigestSize();
    byte[] md5 = new byte[length];
    digest.doFinal(md5, 0);
    et.setText(md5.toString());
    return md5;
}

c# 中 md5 的结果是:XUFAKrxLKna5cZ2REBfFkg==

android 中 md5 的结果是:[B@4053cf40

I am doing md-5 hashing in both android and c# at the same time. But both the results should be the same for the same inputs. Is there any difference in the way its done in both the languages?

I get different outputs in both the cases. Here is the c# code for md-5 calculation:

//this method hashes the values sent to it using MD5
public static String hashwithmd5(String toHashMD5)
{
    byte[] keyArray;

    MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
    keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(toHashMD5));
    hashmd5.Clear();
    return Convert.ToBase64String(keyArray, 0, keyArray.Length); 
}

and here is the code for md5 in android using bouncycastle

public byte[] Hashing(String toHash) throws Exception{
    byte[] hashBytes = toHash.getBytes("UTF-8");
    EditText et = (EditText) findViewById(R.id.entry);
    org.bouncycastle.crypto.digests.MD5Digest digest = new org.bouncycastle.crypto.digests.MD5Digest();
    digest.reset();
    digest.update(hashBytes, 0, hashBytes.length);
    int length = digest.getDigestSize();
    byte[] md5 = new byte[length];
    digest.doFinal(md5, 0);
    et.setText(md5.toString());
    return md5;
}

the result of md5 in c# is :XUFAKrxLKna5cZ2REBfFkg==

the result of md5 in android is :[B@4053cf40

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浴红衣 2024-10-24 13:02:29

C# 代码将哈希值转换为 Base64,而 java 代码则不会。如果您将两个原始哈希值转换为十六进制字符串,它们将是相同的。

The C# code converts the hash to Base64, the java code does not. If you convert both raw hashes to e.g. hex strings, they'll be the same.

甜是你 2024-10-24 13:02:29

当您在 Java 中使用它时:

byte[] md5 = new byte[length];
// ...
md5.toString()

没有获得字节值的表示。您将获得对象的通用“字符串表示形式”。这里,[B@4053cf40 基本上意味着“字节数组(用于‘[B’),其内部恰好位于地址 4053cf40”。

使用 android.util.Base64 将字节转换为 Base64 编码的字符串。

When you use this in Java:

byte[] md5 = new byte[length];
// ...
md5.toString()

you are not getting a representation of the byte values. You get the generic "string representation" of an object. Here, [B@4053cf40 basically means "array of bytes (that's for the '[B') which internally happens to be at address 4053cf40".

Use android.util.Base64 to convert your bytes to a Base64 encoded string.

骑趴 2024-10-24 13:02:29

@erik是正确的。 MD5 不再被视为“安全”哈希;使用 SHA-256。

@erik is correct. MD5 is no longer considered a "secure" hash; use SHA-256.

夏有森光若流苏 2024-10-24 13:02:29

埃里克是绝对正确的。 MD5 的使用已接近绝迹,请使用任何强 SHA

Erik is absolutely right. MD5 usage is near extinction, use any strong SHA

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文