我正在使用以下代码为我的应用程序生成MD5哈希,它编码了一些字符串值,然后通过我的Web服务将生成的哈希发送给了一些.Net代码,该代码读取了我的MD5哈希并生成字符串的MD5他是从DB获得,然后字符串比较它们MD5哈希生成问题
public static String getMD5Hash(String val) throws Exception {
byte[] bytes = val.getBytes();
MessageDigest m = MessageDigest.getInstance("MD5");
byte[] digest = m.digest(bytes);
String hash = new BigInteger(1, digest).toString(16);
System.out.println(hash.length());
return hash;
}
public static void main(String[] asd) throws Exception{
for(int i=0;i<10;i++){
System.out.println(getMD5Hash(i+Math.pow(10, i)+""));//for testing
System.out.println(getMD5Hash(i+""));//for testing
}
}
的问题是,因为我从BigInteger的越来越变换散列和产生了一些时间哈希以0在这种情况下BIGINTEGER不启动考虑0和另一方面.Net生成相同的字符串的散列时,它产生0,并以这种方式字符串比较返回false,例如 哈希码我生成和发送 “102678D1922799CF9122B3F103975F1
” 在.net中的散列哪里是 “0102678D1922799CF9122B3F103975F1
”
也有一些时候,它生成的代码像
.Net generates 0012678D1922799CF9122B3F103975F1 and java 12678D1922799CF9122B3F103975F1
OR
0002678D1922799CF9122B3F103975F1 and 2678D1922799CF9122B3F103975F1
我怎样才能得到这个代码中的所有0都在开始。 在此先感谢。
使用Apache'Base64' - 参考线程 - http://stackoverflow.com/questions/469695/decode-base64-data-in-java – adatapost
评论这个http://stackoverflow.com/questions/415953/generate-md5-hash-in-java – Chuidiang
客户端使用相同的.Net应用程序,所以我必须使用th是一个 – NoNaMe