一、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];