クライアント側では、文字列の MD5 暗号化を行ってから、生成されたハッシュに対して BASE 64 エンコーディングを行っています。
この最終的にエンコードされた文字列は、サーバー側での比較に使用されます。
多くのテストケースでこれを成功させることができましたが、以下のケースでは失敗しました。
MD5の文字列
2679:07071960:09348448:3:08912206:3:EXPRESS:1:EU4NW31E7INEC1X
私のMD5ハッシュ文字列:
291423A531148527A9524EA0924CDF68
私の Base64 でエンコードされた文字列:
KRQjpTEUhSepUk6gkkzfaA==
BASE64 エンコーディング用の MD5 ハッシュ文字列を http://www.opinionatedgeek.com/dotnet/tools/base64encode/に配置しようとすると、次の文字列が生成されます。
MjkxNDIzQTUzMTE0ODUyN0E5NTI0RUEwOTI0Q0RGNjg=
しかし、Base64 文字列をデコードしようとすると、それは "KRQjpTEUhSepUk6gkkzfaA==" です。ここではhttp://www.opinionatedgeek.com/dotnet/tools/Base64Decode/Default.aspxハッシュ コードを取得しています (.bin を開きました)ファイルは 16 進エディタで生成されます)。
では、1 つの文字列に Base64 でエンコードされた複数の値が含まれる可能性はありますか?
エンコードされた文字列を生成するために以下のコードを使用しています。
public static String getHashCode(String text)
{
MessageDigest md;
byte[] md5hash = new byte[32];
try{
md = MessageDigest.getInstance("MD5");
md.update(text.getBytes("iso-8859-1"), 0, text.length());
md5hash = md.digest();
}
catch(Exception e)
{
return "-1";
}
String encoded = Base64.encode(md5hash);
String retValue = new String(encoded);
return retValue;
}
何が問題なのか、クライアント側とサーバー側の両方で同じダイジェストを使用するようにする方法を教えてください。