// MD5 加密是一种不可逆的加密算法<可以加密不可以解密> ; 任意长度的字符经过 MD5加密之后长度一致; 相同的字符串任何时候经过MD5加密之后生成的字符串是一样的; 原有字符串发生一点点的改变,经过 MD5 加密之后,大不一样<说明 MD5 加密难有规律可循>
- (void)MD5Secrity{
// 需要加密的源字符串
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);
// 使用 base64编码加密之后将 NSData 类型转化为字符串
NSString *sourceString = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
// 由于 MD5 加密相关的函数是 C语言函数,所以我们需要将OC字符串转化为 C语言字符串
const char *str = sourceString.UTF8String;
// 创建一个 char 类型数组来存放加密好的字符
unsigned char resut [CC_MD5_DIGEST_LENGTH];
// 计算 MD5 值
// 第一个参数:需要执行的原数据
// 都二个参数:需要加密的数据的大小
// 第三个参数:加密好之后的数据
CC_MD5(str, (CC_LONG)strlen(str), resut);
// 声明可变的字符串, 用来存放已经加密好的 C 语言字符串。
NSMutableString *resultMString = [[NSMutableString alloc] init];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
NSString *itemStr = [NSString stringWithFormat:@"%02X", resut[i]]; //大小写背包代表大小写加密
[resultMString appendString:itemStr];
}
// 加密好之后的密文
NSLog(@"resultString ----- %@", resultMString);
}
#pragma mark 加密 NSData 类型
- (void) MD5DataSecrity{
// 将图片转化为 NSData类型
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);
// 创建 MD5 变量
CC_MD5_CTX md5;
// 初始化 MD5 变量
CC_MD5_Init(&md5);
// 准备 MD5 加密
// 第一个参数:
// 第二个参数:C语言的二进制类型
// 第三个参数:imageData 的长度
CC_MD5_Update(&md5, imageData.bytes, (CC_LONG)imageData.length);
// 结束 MD5 加密
// 创建一个 unsigned char* 字符数组<根据长度> 用来存放加密好的数据
unsigned char result [CC_MD5_DIGEST_LENGTH];
// result 是一个指针直线给字符数组的首地址
CC_MD5_Final(result, &md5);
// 创建OC可变字符串用来接收最终的数据
NSMutableString *endString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[endString appendFormat:@"%02x", result[i]];
}
NSLog(@"%d",CC_MD5_DIGEST_LENGTH);
NSLog(@"endString ------- %@", endString);
}
// 将NSData 进行加密的两种方式:1、对应 C的二进制类型 bytes 2、对应 C 的字符数组类型
/***
* base64 加密 可逆加密方式 用于数据传输和存储的时候 eg.音频 视频 图像 的存储和传输
* 通常通过base64 将元数据转化为字符串类型:一方面便于传输和存储,另一方面也进行了加密
*/
#pragma mark base64 加密和解密
- (NSString *)base64EncodingWithSourceData:(NSData *)sourceData{
NSString *base64ResultStr = [sourceData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
return base64ResultStr;
}
// 参数为base64 加密之后的字符串
- (NSData *)base64DecodingWithString:(NSString *)base64String{
// data 的 *具体数据类型看数据 eg. 视频数据,音频数据,图片数据
NSData *base64ResultData = [[NSData alloc] initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters];
// eg.图片类型
// UIImage *image = [UIImage imageWithData:base64ResultData];
// NSLog(@"image-------- %@", image);
return base64ResultData;