iOS常用数据加解密总结

一、MD5

MD5是常见的加密方法。有16和32位。
为了让MD5码更加安全 涌现了很多其他方法 如加盐。 盐要足够长足够乱 得到的MD5码就很难查到。
苹果使用MD5加密,非常方便

#import@interface MD5Encrypt : NSObject
// MD5加密
/*
*由于MD5加密是不可逆的,多用来进行验证
*/
// 32位小写
+(NSString *)MD5ForLower32Bate:(NSString *)str;
// 32位大写
+(NSString *)MD5ForUpper32Bate:(NSString *)str;
// 16为大写
+(NSString *)MD5ForUpper16Bate:(NSString *)str;
// 16位小写
+(NSString *)MD5ForLower16Bate:(NSString *)str;
@end
#import "MD5Encrypt.h"
#import <CommonCrypto/CommonDigest.h>

@implementation MD5Encrypt

#pragma mark - 32位 小写
+(NSString *)MD5ForLower32Bate:(NSString *)str{

    //要进行UTF8的转码
    const char* input = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input, (CC_LONG)strlen(input), result);

    NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [digest appendFormat:@"%02x", result[i]];
    }

    return digest;
}

#pragma mark - 32位 大写
+(NSString *)MD5ForUpper32Bate:(NSString *)str{

    //要进行UTF8的转码
    const char* input = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input, (CC_LONG)strlen(input), result);

    NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [digest appendFormat:@"%02X", result[i]];
    }

    return digest;
}

#pragma mark - 16位 大写
+(NSString *)MD5ForUpper16Bate:(NSString *)str{

    NSString *md5Str = [self MD5ForUpper32Bate:str];

    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}


#pragma mark - 16位 小写
+(NSString *)MD5ForLower16Bate:(NSString *)str{

    NSString *md5Str = [self MD5ForLower32Bate:str];

    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}

@end

二、RSA加密

RSA加解密需要两个钥匙,一个公钥一个私钥。

1.使用publicKey可以对数据进行加密

2.使用privateKey才能对数据进行解密

单向传输

用公钥加密的数据只有私钥能解开(可用于加密)
同时,用私钥加密的数据,只能公钥解开。但是速度比较慢。(比私钥加密慢100到1000倍)
公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman等

公钥与私钥

1.权威数字认证机构(CA)给所有通信主体(个人或组织)颁发公钥和私钥,彼此配对,分别唯一。
2.私钥好比数字指纹,同时具有解密和加密功能。个人保管,不公开。
3.公钥好比安全性极高的挂号信箱地址,公开。

这里写图片描述
RSA算法及其在iOS中的使用

三、Base64加密

base64 可以对任意的文件进行加密.
base64 过程是可逆的. 可以反向解密.
由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。

将字符串进行base64加密

NSString *str = @"hello world"; 

//将原来的数据转换成二进制数据NSData.
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

//将data进行base64编码---加密
NSData *base64Data = [data base64EncodedDataWithOptions:0];
对图片进行 base64 加密
    UIImage *image = [UIImage imageNamed:@"dsa"];
    //将图片转化成二进制数据NSData
    NSData *imagePNGData = UIImagePNGRepresentation(image);
    NSData *imageJPEGDate =  UIImageJPEGRepresentation(image, 0.5);

    //将data进行base64编码---加密
    NSData *base64Data = [data base64EncodedDataWithOptions:0];

    //将编码后的basedata写入文件。
    [base64Data writeToFile:@"/Users/apple/Desktop/base64" atomically:YES];
对这个字符串进行 base64 解密
//返回的是 base64 加密之后的字符串.
NSString *base64Str = [data base64EncodedStringWithOptions:0]; 
NSLog(@"base64Str: %@",base64Str);
 NSLog(@"%@ %ld base64Data: %@ %ld",data,data.length,base64Data,base64Data.length);
对一张图片进行 base64 解密
//将base64Data进行解密转成NSData类型的endata
NSData *endata = [[NSData alloc] initWithBase64EncodedData:base64Data options:0]; 

//将endata转换成image
UIImage* image = [UIImage imageWithData:data];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值