md5加密base64加密解密

来源:互联网 发布:淘宝卖家网页制作 编辑:程序博客网 时间:2024/05/22 03:26

// 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;


0 0