//MD5加密的结果为128位的二进制数.
//所以有128 / 8 = 16字节(8位一个字节).
//每八位表示两个16进制数.
//MD5 有32个16进制数.
//语言层次的所有摘要算法步骤类似,只有加密结果的数组长度不一样.
需要导入框架: #import <CommonCrypto/CommonCrypto.h>
C语言实现加密过程:
//明文
char *str = "I LOVE iOS";
//系统定义了一个相对应加密结果的长度(字节数).我们在使用摘要算法时,只要使用对应的宏就可以,不需要记忆.
unsigned char result[16] ;//创建存放MD5结果的数组
//开始加密过程
CC_MD5_CTX md5;
//初始化
CC_MD5_Init(&md5);
//更新加密参数
//第一个参数:MD5加密主题 第二个参数:需要机密的内容 第三个参数:要加密的长度
CC_MD5_Update(&md5, str, (CC_LONG)strlen(str));
//结束加密
CC_MD5_Final(result, &md5);
//打印机密结果
for (int i = 0; i < 16; i++) {
printf("%02x",result[i]);
}
printf("\n");
//系统提供MD5加密实现原理
void AG_MD5(const void *data,CC_LONG len,unsigned char *md);
void AG_MD5(const void *data,CC_LONG len,unsigned char *md){
CC_MD5_CTX md5;
CC_MD5_Init(&md5);
CC_MD5_Update(&md5, data, len);
CC_MD5_Final(md, &md5);
}
实现OC字符串对象加密
NSString *str1 = @"岁月微凉人好,回忆袭身日渐长"; //明文
const char *strChar = [str1 cStringUsingEncoding:NSUTF8StringEncoding];//将字符串转化为函数所需类型
unsigned char result[CC_MD2_DIGEST_LENGTH];//接受结果数组
//加密
CC_MD5(strChar, (CC_LONG)str1.length, result);
NSMutableString *resultString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH];
for (int i= 0; i < CC_MD2_DIGEST_LENGTH; i++) {
//将加密结果的数组以16进制数的形式拼接到可变字符串上
[resultString appendFormat:@"%02x",result[i]];
}
NSLog(@"%@",resultString);
对文件加密与对字符串加密相同,将文件转化为二进制流(NSData)进行加密,即可.