iOS实现MD5加密

获得MD5加密

- (NSString *)md5:(NSString *)str
{
    NSString *resultStr = nil;
    const char *cStr = [str UTF8String];//指针不能变,cStr指针变量本身可以变化
    unsigned char result[16];//这里可以CC_MD5_DIGEST_LENGTH宏代替16,这里不明白为什么写16后面我有解释的!
    CC_MD5(cStr, (unsigned int)strlen(cStr), result);
    resultStr = [NSString stringWithFormat:  
  @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
            result[0], result[1], result[2], result[3],
            result[4], result[5], result[6], result[7],
            result[8], result[9], result[10], result[11],
            result[12], result[13], result[14], result[15]
            ];
    return [resultStr uppercaseString];
}

值得注意的是:

其中%02x是格式控制符:‘x’表示以16进制输出,‘02’表示不足两位,前面补0;如‘f’输出为0f,‘1f3’则输出1f3;还有就是为什么是result[16]呢,这是因为MD5算法最后生成的是128位,而在计算机的最小存储单位为字节,1个字节是8位,对应一个char类型,计算可得需要16个char。所以result是[16]。那么为什么输出的格式一定是%02x呢,而不是其它呢。这也是有原因的:因为约定MD5一般是以16进制的格式输出,那么其实这个问题就转换为把128个0和1以16进制来表示,每4位二进制对应一个16进制的元素,则需要32个16进制的元素,如果元素全部为0,放到char的数组中,正常是不会输出,如00001111,以%x输出,则是f,那么就会丢失0;但如果以%02x表示则输出结果是0f,正好是转换的正确结果。
所以以上就是char[16]和%02x的来历。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 软件开发过程中,对数据进行加密是保证数据安全的重要手段,常见的加密有Base64加密和MD5加密。Base64加密...
    Billy_W阅读 5,743评论 0 0
  • 先说一下:MD5加密可破解,每一个原密码对应一个不变的MD5加密的密码效果: MD5加密demo 密码: c1j2...
    IIronMan阅读 7,259评论 2 32
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,911评论 6 13
  • 开篇应该先说明一下这是我写的第一篇技术博客,水平高低的大家多提宝贵意见。最近做的一个和蓝牙交互的iOS APP,其...
    AmdyTeng阅读 6,570评论 0 3
  • 在IOS开发过程中,为了保证数据的安全,我们通常要采取一些加密方法,常见的加密有Base64加密和MD5加密。Ba...
    Originalee阅读 9,118评论 0 18

友情链接更多精彩内容