** 問題解決。私の入力は、EditTextから関数を実行するJavaへの途中で変更されました。それは本当に明白でした。私は本当にばかげている。みんなの時間を無駄にして本当に残念です...android md5暗号化がmysqlまたはphpと一致しませんか?
私はMD5を使用して文字列を暗号化し、MySQLとPHPで使用されているmd5関数の結果と一致しないことがわかりました。例えば
:
PHP/MYSQL: 文字列:password
ハッシュ:5f4dcc3b5aa765d61d8327deb882cf99
アンドロイド: 文字列:password
ハッシュ:bc4a7f3b32b2a85688a53c49df19cd95
私は検索とstackoverflowの上の人々を見てきました同じ問題を抱えていますが、まだ回答が見つかりませんでした。 私は多くの方法を使用して、文字コードを変更しようとしましたが、それでも一致することはありません。すべてのヘルプをいただければ幸いです
public static String md5(String input){
String result = input;
if(input != null) {
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
md.update(input.getBytes());
BigInteger hash = new BigInteger(1, md.digest());
result = hash.toString(16);
if ((result.length() % 2) != 0) {
result = "0" + result;
}
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
return result;
}
:
は、ここで私は現在、(これは動作しません)私のプロジェクトに保存されている機能です。
うーん...標準のSun JVM(1.6)でコードを実行すると、正しい出力が得られます。 AndroidのデフォルトのcharsetはUTF-8でなければならないので、 'input.getBytes()'とは関係ないと思います。 'MessageDigest'と何か関係があります。それにもかかわらず、 'getBytes(" UTF-8 ")'を明示的に使って試してみます。 – Peter
文字列をバイト配列に変更するときに、同じ文字列エンコーディングを使用しようとしましたか? – Selvin
スニペットはプラットフォームのデフォルトのエンコーディングに頼っているようです(AndroidはUTF-8を既に使用していますが)。入力に空白がないことは確かですか?別のスニペットについては、これも参照してください:http://stackoverflow.com/questions/5494447/what-will-be-the-android-java-equivalent-of-md5-function-in-php – BalusC