在开发中,我们经常会用到MD5对一些数据进行简单加密,在之前一直用的是下面这个方法:
这种方法,对数字和字母一类的加密,是可以使用的,但是如果遇到汉字或者类似“\0”这种特殊字符就跪了,你会加密出来的怎么都不对,这时候就要用下面这种方法:
上面这两种方法,看上去没有什么区别,只不过一个是NSString,一个是NSData。但是在OC中,苹果对汉字的长度做了处理,原来一个中文占了3个字节,使用 length 的时候,获取到的汉字长度是1.这样就导致加密出来的结果不一样.
后来测试过在第一个方法中,把CC_MD5( cStr, (CC_LONG)pwd.length, digest );改为CC_MD5( cStr, (CC_LONG)strlen(cStr), digest );这样也能实现对汉字的加密,这也进一步证明对长度的获取应该用c的方法。
最后附上原文链接iOS 下关于 MD5 的那个坑