hmac-md5算法
来源:互联网 发布:js面向对象的优点 编辑:程序博客网 时间:2024/06/07 05:02
+ (NSString *)hmac_MD5:(NSString *)plaintext withKey:(NSString *)key{ constchar *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; constchar *cData = [plaintext cStringUsingEncoding:NSUTF8StringEncoding]; constunsigned int blockSize =64; //散列函数的分割数据长度为64 char ipad[blockSize]; char opad[blockSize]; char keypad[blockSize]; unsignedint keyLen = strlen(cKey); //密钥的长度 CC_MD5_CTX ctxt; if (keyLen > blockSize) { //密钥长度大于分割数据长度,则先进行md5运算,运算结果拷贝到keypad中 CC_MD5_Init(&ctxt); CC_MD5_Update(&ctxt, cKey, keyLen); CC_MD5_Final((unsignedchar *)keypad, &ctxt); keyLen = CC_MD5_DIGEST_LENGTH; //使keylength为16字节 } else { memcpy(keypad, cKey, keyLen); //否则直接拷贝到keypad字符串中 } memset(ipad,0x36, blockSize); //设置ipad为0x36 memset(opad,0x5c, blockSize); //设置opad为0x5c int i; for (i =0; i < keyLen; i++) { ipad[i] ^= keypad[i]; //keypad与ipad做异或运算 opad[i] ^= keypad[i]; //可以pad与opad做异或运算 } //将ipad加入到ctxt中,再将cdata加入到ctxt中,进行md5运算,结果放入md5字符串中 CC_MD5_Init(&ctxt); CC_MD5_Update(&ctxt, ipad, blockSize); CC_MD5_Update(&ctxt, cData,strlen(cData)); unsignedchar md5[CC_MD5_DIGEST_LENGTH]; CC_MD5_Final(md5, &ctxt); //将opad加入到ctxt中,再将上一步的md5加入到ctxt中,进行md5运算,结果放入md5字符串中 CC_MD5_Init(&ctxt); CC_MD5_Update(&ctxt, opad, blockSize); CC_MD5_Update(&ctxt, md5,CC_MD5_DIGEST_LENGTH); CC_MD5_Final(md5, &ctxt); //转成16进制 constunsigned 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 = [[NSDataalloc] initWithBytes:hexlength:strlen(hex)]; NSString *hash = [[NSStringalloc] initWithData:HMACencoding:NSUTF8StringEncoding]; return hash;}
0 0
- hmac-md5算法
- java实现HMAC-MD5算法
- HMAC-MD5算法原理及实现
- HMAC-MD5算法原理及实现
- HMAC-MD5 算法的java实例
- HMAC-MD5 算法的java实例
- HMAC MD5算法原理及用处
- HMAC-MD5算法原理及实现
- BASE64,MD5,SHA,HMAC加密解决算法
- HMAC-MD5 算法的java实例
- HMAC-MD5算法原理及实现
- HMAC-MD5 算法的java实例
- HMAC-MD5
- HMAC-MD5
- hmac-sha1算法
- BASE64,MD5,SHA,HMAC加密与解密算法(java)
- MD5-hmac密钥验证算法的简要介绍
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
- 文章标题
- URLEncode和URLDecode的注意事项
- ionic 判断网络状态
- linux搜索命令
- "Exception: org.apache.ibatis.builder.xml.IncompleteStatementException: Could not find result map...
- hmac-md5算法
- 在switch 分支语句中,default 的位置.对结果有没有影响?
- AVPlayer预缓存:prerollAtRate
- EOFFException异常 最简单的解决办法.
- JAVA char与byte的区别和转换
- mysql中datetime比较大小问题
- 框架模式 MVC 在Android中的使用
- [BZOJ3196]二逼平衡树(线段树套splay)
- android里面的USB功能-----Accessory模式