1. 广告追踪一直在用的自己写的md5加密:
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(prepare_map_str.getBytes());
sign= (new BigInteger(1, md.digest())).toString(16);
while(sign.length()<32){ sign="0"+sign;}
} catch (Exception e) {
System.out.println("MD5 encryption error");
}
最经典的一个bug就是必须加上 while(sign.length()<32){ sign="0"+sign;} ,
否则会发现第一位为0的话会被省去,变成31位的输出。
结果使用echo "$str"|wc -c验证位数,还是显示32了,我还以为一切正常。
仔细数了数才发现是31位,由此发现了wc -c计算字符的数量的bug:会多记一位数。
2. 对接瓜子二手车的时候需要md5加密然后sha1加密,发现了如下用法:
1)、使用apache的codec jar包对string进行加密,先下载并引入jar包:
http://commons.apache.org/proper/commons-codec/
2)、生成:
String sign = DigestUtils.shaHex(str);
3. everything一搜发现上面的jar包默认已经在项目里了。于是举一反三,jd打开jar包看到MD5加密的类似的方法了。直接用:
sign = DigestUtils.md5Hex(str);
替代了之前写的方法。测试完好无损!