在客户端,我正在对字符串进行MD5加密,然后对生成的哈希进行BASE 64编码.
然后将该最终编码的字符串用于服务器端的比较.
我能够成功地为许多测试用例做到这一点但是对于下面的测试用例失败了.
MD5的字符串
2679:07071960:09348448:3:08912206:3:EXPRESS:1:EU4NW31E7INEC1X
Run Code Online (Sandbox Code Playgroud)
我的MD5哈希字符串:
291423A531148527A9524EA0924CDF68
Run Code Online (Sandbox Code Playgroud)
我的Base64编码字符串:
KRQjpTEUhSepUk6gkkzfaA==
Run Code Online (Sandbox Code Playgroud)
当我尝试在http://www.opinionatedgeek.com/dotnet/tools/base64encode/上放置BASE64编码的MD5哈希字符串时, 它会生成以下字符串:
MjkxNDIzQTUzMTE0ODUyN0E5NTI0RUEwOTI0Q0RGNjg=
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试解码我的Base64字符串时,就是"KRQjpTEUhSepUk6gkkzfaA ==",这里http://www.opinionatedgeek.com/dotnet/tools/Base64Decode/Default.aspx我得到了我的哈希码(打开了.bin)文件在十六进制编辑器中生成).
那么,单个字符串是否可能具有多个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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,建议出现问题以及如何确保在客户端和服务器端使用相同的摘要.