iOS开发 - 需要加密key的SHA256和MD5加密
2016-12-13 14:10
295 查看
如果你们在加密的时候,后台告诉你,用哈希算法或者MD5算法,然后用加密key来加密,你可能会一脸懵逼,博主也是第一次听说哈希加密要用加密key,为了弥补下知识空缺,博主就在网上查找资料,结果找到了这个东西:消息摘要算法。
消息摘要算法
我们通常在遇到的时候会看到“HMAC”字眼,mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。
关于HMAC算法,需要和SHA256结合起来的话,代码如下:
HMACMD5加密
参考博客:
http://supershll.blog.163.com/blog/static/37070436201411522220174/
http://www.jianshu.com/p/98e376b66a26
对于hmac的解析推荐百度词条,了解即可。
http://baike.baidu.com/link?url=n6Fe5etGJFBvj-MXE77ohyet-Nh0Dwl4SQ1GApHC3THe3zQMfAT-6pjtpCMr5vSKd7TOQYr2SHnZJ0B3RgQdqq
消息摘要算法
我们通常在遇到的时候会看到“HMAC”字眼,mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。
关于HMAC算法,需要和SHA256结合起来的话,代码如下:
//如果需要用到SHA的其他加密方法,比如128,1就把里面的256字眼换成对应的数字即可 引入头文件 #import <CommonCrypto/CommonHMAC.h> #import <CommonCrypto/CommonCryptor.h> - (NSString *)hmac:(NSString *)plaintext withKey:(NSString *)key { const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cData = [plaintext cStringUsingEncoding:NSASCIIStringEncoding]; unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)]; const unsigned char *buffer = (const unsigned char *)[HMACData bytes]; NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2]; for (int i = 0; i < HMACData.length; ++i){ [HMAC appendFormat:@"%02x", buffer[i]]; } return HMAC; }
HMACMD5加密
//引入头文件 #import <CommonCrypto/CommonDigest.h> + (NSString *)HMACMD5WithString:(NSString *)toEncryptStr WithKey:(NSString *)keyStr { const char *cKey = [keyStr cStringUsingEncoding:NSUTF8StringEncoding]; const char *cData = [toEncryptStr cStringUsingEncoding:NSUTF8StringEncoding]; const unsigned int blockSize = 64; char ipad[blockSize]; char opad[blockSize]; char keypad[blockSize]; unsigned int keyLen = strlen(cKey); CC_MD5_CTX ctxt; if (keyLen > blockSize) { CC_MD5_Init(&ctxt); CC_MD5_Update(&ctxt, cKey, keyLen); CC_MD5_Final((unsigned char *)keypad, &ctxt); keyLen = CC_MD5_DIGEST_LENGTH; } else { memcpy(keypad, cKey, keyLen); } memset(ipad, 0x36, blockSize); memset(opad, 0x5c, blockSize); int i; for (i = 0; i < keyLen; i++) { ipad[i] ^= keypad[i]; opad[i] ^= keypad[i]; } CC_MD5_Init(&ctxt); CC_MD5_Update(&ctxt, ipad, blockSize); CC_MD5_Update(&ctxt, cData, strlen(cData)); unsigned char md5[CC_MD5_DIGEST_LENGTH]; CC_MD5_Final(md5, &ctxt); CC_MD5_Init(&ctxt); CC_MD5_Update(&ctxt, opad, blockSize); CC_MD5_Update(&ctxt, md5, CC_MD5_DIGEST_LENGTH); CC_MD5_Final(md5, &ctxt); const unsigned int hex_len = CC_MD5_DIGEST_LENGTH*2+2; char hex[hex_len]; for(i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { snprintf(&hex[i*2], hex_len-i*2, "%02x", md5[i]); } NSData *HMAC = [[NSData alloc] initWithBytes:hex length:strlen(hex)]; NSString *hash = [[NSString alloc] initWithData:HMAC encoding:NSUTF8StringEncoding]; return hash; }
参考博客:
http://supershll.blog.163.com/blog/static/37070436201411522220174/
http://www.jianshu.com/p/98e376b66a26
对于hmac的解析推荐百度词条,了解即可。
http://baike.baidu.com/link?url=n6Fe5etGJFBvj-MXE77ohyet-Nh0Dwl4SQ1GApHC3THe3zQMfAT-6pjtpCMr5vSKd7TOQYr2SHnZJ0B3RgQdqq
相关文章推荐
- ios-day20-04(ios开发中的MD5加密和SHA1加密)
- 关于iOS开发中使用到的AES加密和SHA256加密的使用
- .net实现md5加密 sha1加密 sha256加密 sha384加密 sha512加密 des加密解密
- WCF开发框架形成之旅--您的数据是否需要加密
- 【越狱开发】调试iOS下没有加密的第三方程序
- IOS开发需要注意的property变量声明
- IOS开发需要注意的property变量声明
- C#.NET COOKIE操作 KEY使用MD5加密,Value使用AES加密
- iOS开发之常用加密方法(aes、md5、base64)
- IOS开发-需要知道的一些事情
- ios开发之Objective-C中BASE64编码加密解密的使用
- IOS开发之NSDictionary里setValue:forKey与setObject:forKey、objectForKey与valueForKey的差异
- WCF开发框架形成之旅--您的数据是否需要加密
- 密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密
- 【iOS-cocos2d-X 游戏开发之六】使用Base64算法对Cocos2dX自带CCUserDefault游戏存储数据加密!
- IOS开发之——objectForKey与valueForKey在NSDictionary中的差异
- ios开发kvo模式基础-Key-Value Observing 快速入门
- ios开发kvo模式基础-Key-Value Observing 快速入门
- IOS开发之——objectForKey与valueForKey在NSDictionary中的差异
- IOS IPhone 开发需要的开源库[编辑中.. 不断更新]