1. 前两天和考拉海购和UC做ios广告的app分发对接,需要按照要求使用MD5加密返回32位加密字符串。
2. 测试通过后就在线上投放广告了。奇怪的是偶尔会收到恢复说sign验证失败。百思不得其解。
3. 和我们组员讨论了一下,使用在线md5验证sign,发现报错的sign都是31位的,且都是第一位丢掉了一个0.
4. 我这就觉得搞笑了,那就是md5加密返回的BigInteger先丢失了头部的0,然后转换成String就变成这样了?
5. 赶紧加个while(str.length()<32){str="0"+str;} 先解决线上问题再说。
6. 我一直不敢相信sign丢掉了一位是因为,我使用echo $str|wc -c 测试了长度的啊,一直是32啊。
7. 结果自己输了好几遍终于确定wc命令的输出就是会比实际的字符串长度多一位!最终还找到了网上的wc的bug记录。
8. 那么问题来了,如何最快的计算出字符串的长度?进过努力,最终我迎接来了春天:
alias len='func_strlen(){ str=$@;echo ${#str};};func_strlen $@'
9. 使用如下: len "hi dick"