2011-02-15 7 views
1

のmd5ハッシュを比較すると同時にアンドロイドとc#の両方でmd-5ハッシングを行っています。しかし、両方の結果は同じ入力に対して同じでなければならない。両方の言語で行われる方法に違いはありますか?アンドロイド(java)とc#

どちらの場合も出力が異なります。ここでは、MD5の計算のためのC#コードは次のとおりです。XUFAKrxLKna5cZ2REBfFkgの==

//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でのMD5のコードはC#でMD5の結果はは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; 
} 

を使用しています

アンドロイドのmd5の結果は次のとおりです。[B @ 4053cf40

+0

誰かがこれらの計算の2つで何が違うのか教えてください。同じo/pを得るにはどうすればいいですか? – cris

+0

バイト配列を比較するとどうなりますか?彼らは同じですか? – techiServices

+0

@crisは解決策を得ることができますか? – CoronaPintu

答えて

8

C#コードはハッシュをBase64に変換しますが、Javaコードは変換されません。両方の生ハッシュを例えば16進数の文字列は、同じになります。

0

@erikは正しいです。 MD5はもはや「安全な」ハッシュとはみなされません。 SHA-256を使用してください。

1

あなたはJavaでこれを使用する:

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

あなたははバイト値の表現をを取得されていません。オブジェクトの一般的な文字列表現を取得します。ここで、[[email protected]は基本的には「バイトの配列(内部では4053cf40にある '[B'」の配列)を意味します。

android.util.Base64を使用して、バイトをBase64でエンコードされた文字列に変換します。

+0

このライブラリandroid.util.Base64を使ってバイト配列をbase64文字列に変換する方法の例を教えてください。 – cris

0

エリックは大丈夫です。 MD5の使用法は絶滅に近づいています。強いSHAを使用してください

関連する問題