iOS 加密:MD5、BASE64、(AES)对称加密、非对称加密、DES(keychain中使用)

iOS在安全方面所采用的的加密方式:MD5、BASE64、(AES)对称加密、非对称加密、DES(keychain中使用)

1.MD5

使用场景:

(1)登陆、注册密码需要MD5加密下(防止直接看到明文)

(2)在http请求时候header需要(防止被篡改)

//MD5是不可逆的只有加密没有解密

NSTimeIntervaltimeInterval=[[NSDate date] timeIntervalSince1970]*1000;

NSString*timeStamp=[NSString  stringWithFormat:@"%.f",floor(timeInterval)];

//  MD5加密 单纯的MD5加密不安全 需要加盐,加盐就是在要加密的内容后加一些常量,常量越长越安全

//盐值

NSString*safeKey=safekey;//安全码

NSString*signStr=[NSString  stringWithFormat:@"timestamp=%@&safekey=%@",timeStamp,safeKey];

NSString*auth=[[Utils  md5HexDigest:signStr ]  lowercaseString];

[manager.requestSerializersetValue:auth  forHTTPHeaderField:@"crpdb_auth"];

[manager.requestSerializersetValue:timeStamp  forHTTPHeaderField:@"timestamp"];

原理简介:MD5算法原理

2.BASE64(只支持加密英文)

base64编码是可逆的,它是一种编码格式不是加密方式。

#import "NSString+Base64.h"

@implementation NSString (Base64)

- (NSString *)base64EncodedString;

{

NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];

return [data base64EncodedStringWithOptions:0];

}

- (NSString *)base64DecodedString

{

NSData *data = [[NSData alloc]initWithBase64EncodedString:self options:0];

return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

}

@end

NSString *codeString = @"Hello world";

NSLog(@"原文--%@",codeString);

NSString *base64Str = [codeString base64EncodedString];

NSLog(@"Base64编码--%@",base64Str);

NSString *decodeStr = [base64Str base64DecodedString];

NSLog(@"Base64解码--%@",decodeStr);

base64编解码过程


3.AES加密(对称加密)

原理:

AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。Figure 1 显示了 AES 用192位密钥对一个16位字节数据块进行加密和解密的情形。

加密代码

NSString *password = @"password";//一般来说用户名就是用户密码的Key

NSString *passwordKey = @"userName";

NSString *encryptedData = [AESCrypt encrypt:password password:passwordKey];//加密

NSString *messagepassword = [AESCrypt decrypt:encryptedData password:passwordKey]; //解密

NSLog(@"加密结果 = %@",encryptedData);

NSLog(@"解密结果 = %@",messagepassword);

加密实例代码

-(void)saveUserNameAndPwd:(NSString *)userName andPwd:(NSString *)pwd

{

NSUserDefaults * settings = [NSUserDefaults standardUserDefaults];

[settings removeObjectForKey:@"UserName"];

[settings removeObjectForKey:@"Password"];

[settings setObject:userName forKey:@"UserName"];

pwd = [AESCrypt encrypt:pwd password:@"pwd"];

[settings setObject:pwd forKey:@"Password"];

[settings synchronize];

}

-(NSString *)getPwd

{

NSUserDefaults * settings = [NSUserDefaults standardUserDefaults];

NSString * temp = [settings objectForKey:@"Password"];

return [AESCrypt decrypt:temp password:@"pwd"];

}

4.DES(对称加密)

DES(数据加密标准)原理

DES是一个分组加密算法,它以64位为分组对数据加密。64位一组的明文从算法的一端输入,64位的密文从另一段输出。它是一个对称算法:加密和解密用的是同一个算法。

密钥通常表示为64位的数,但每个第8位都用作奇偶校验,可以忽略,所以密钥长度为56位。密钥可以是任意的56位的数,且可在任意的时候改变。

DES算法只不过是加密的两个基本技术——混乱和扩散的组合,即先代替后置换,它基于密钥作用于明文,这是一轮(round),DES在明文分组上实施16轮相同的组合技术。

用于keychain本地存储钥匙串

加密、解密代码

pod 'SSKeychain'

NSString *bundleID = [NSBundle mainBundle].bundleIdentifier;

[SSKeychain setPassword:@"111" forService:bundleID account:@"ni"];

[SSKeychain setPassword:@"222" forService:bundleID account:@"wo"];

[SSKeychain setPassword:@"333" forService:bundleID account:@"ta"];

NSString *passwords = [SSKeychain passwordForService:bundleID account:@"wo"];

NSLog(passwords);



总结:对称加密分为 AES和DES,AES高级加密标准,DES数据加密标准。

一般使用都是将用户名和密码存储到本地。用于本地用户存储化。

对称加密就是需要一个公钥,拿着公钥去加密,并且拿着公钥去解密。带来问题是:一旦公钥被获取,就会被解密。


5.非对称加密

原理简介

RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。

以甲要把信息发给乙为例,首先确定角色:甲为加密者,乙为解密者。首先由乙随机确定一个KEY,称之为密匙,将这个KEY始终保存在机器B中而不发出来;然后,由这个 KEY计算出另一个KEY,称之为公匙。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。接下来通过网络把这个公钥传给甲,甲收到公钥后,利用公钥对信息加密,并把密文通过网络发送到乙,最后乙利用已知的私钥,就对密文进行解码了。以上就是RSA算法的工作流程。

简单说  甲利用公钥加密  乙利用随机key作为私钥

公钥是通过私钥生成,并且公钥几乎不能解析成私钥,公钥可以通过网络传输给甲,不用担心公钥被劫持。公钥是用来加密的。

私钥保存在服务器,可以使用私钥解密被公钥加密后的数据。

参考网站1

参考网站2

使用地方

支付宝RSA签名

iOS中使用RSA加密

http://www.jianshu.com/p/74a796ec5038


总结:

可能会有人在不理解Base64编码的情况下,将其误用于数据加密或数据校验。

Base64是一种数据编码方式,目的是让数据符合传输协议的要求。标准Base64编码解码无需额外信息即完全可逆,即使你自己自定义字符集设计一种类Base64的编码方式用于数据加密,在多数场景下也较容易破解。

对于数据加密应该使用专门的目前还没有有效方式快速破解的加密算法。比如:对称加密算法AES-128-CBC,对称加密需要密钥,只要密钥没有泄露,通常难以破解;也可以使用非对称加密算法,如 RSA,利用极大整数因数分解的计算量极大这一特点,使得使用公钥加密的数据,只有使用私钥才能快速解密。

对于数据校验,也应该使用专门的消息认证码生成算法,如 HMAC - 一种使用单向散列函数构造消息认证码的方法,其过程是不可逆的、唯一确定的,并且使用密钥来生成认证码,其目的是防止数据在传输过程中被篡改或伪造。将原始数据与认证码一起传输,数据接收端将原始数据使用相同密钥和相同算法再次生成认证码,与原有认证码进行比对,校验数据的合法性。

可以看出MD5作用主要是用户数据校验;对称加密和非对称加密用于数据加密;base64是数据的编码方式。


以下是查看的链接

链接:http://www.jianshu.com/p/b8a5e1c770f9

http://www.jianshu.com/p/b12e88231367

http://www.jianshu.com/p/74a796ec5038

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容