首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较安卓(Java)和c#中的md5散列

比较安卓(Java)和c#中的md5散列
EN

Stack Overflow用户
提问于 2011-02-15 08:07:26
回答 4查看 2.4K关注 0票数 1

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

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

代码语言:javascript
复制
//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); 
}

这是使用bouncycastle的安卓系统中md5的代码

代码语言:javascript
复制
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==

md5在安卓上的结果是:[B@4053cf40

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-15 08:20:58

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

票数 8
EN

Stack Overflow用户

发布于 2011-02-15 20:13:23

当您在Java中使用它时:

代码语言:javascript
复制
byte[] md5 = new byte[length];
// ...
md5.toString()

您无法获得字节值的表示形式。你得到了一个对象的通用“字符串表示”。在这里,[B@4053cf40基本上是指“字节数组(即'[B'),它在内部恰好位于地址4053cf40”。

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

票数 1
EN

Stack Overflow用户

发布于 2011-02-15 08:30:20

@erik是正确的。MD5不再被认为是“安全的”散列;请使用SHA-256。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4998766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档