在客户端,我正在对字符串进行 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在十六进制编辑器中生成的文件)。
那么,单个字符串是否有可能具有多个 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;
}
请提出问题所在以及如何确保我们在客户端和服务器端使用相同的摘要。