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");
}
最經(jīng)典的一個(gè)bug就是必須加上 while(sign.length()<32){ sign="0"+sign;} 涂臣,
否則會(huì)發(fā)現(xiàn)第一位為0的話會(huì)被省去,變成31位的輸出。
結(jié)果使用echo "$str"|wc -c驗(yàn)證位數(shù),還是顯示32了,我還以為一切正常蔗喂。
仔細(xì)數(shù)了數(shù)才發(fā)現(xiàn)是31位,由此發(fā)現(xiàn)了wc -c計(jì)算字符的數(shù)量的bug:會(huì)多記一位數(shù)。
2.? 對(duì)接瓜子二手車的時(shí)候需要md5加密然后sha1加密桶唐,發(fā)現(xiàn)了如下用法:
?java對(duì)String進(jìn)行sha1加密
1)、使用apache的codec jar包對(duì)string進(jìn)行加密茉兰,先下載并引入jar包:
http://commons.apache.org/proper/commons-codec/
2)尤泽、生成:
String sign = DigestUtils.shaHex(str);
3.? everything一搜發(fā)現(xiàn)上面的jar包默認(rèn)已經(jīng)在項(xiàng)目里了。于是舉一反三规脸,jd打開jar包看到MD5加密的類似的方法了坯约。直接用:
sign = DigestUtils.md5Hex(str);
替代了之前寫的方法。測試完好無損莫鸭!