iOS数据加密的那些事

数据加密历史上用于最多最广泛的是军事领域,起源最早的是公元前凯撒大帝。早期的加密方式是将数据按照一定规律将字符转化为其他字符,接受者使用同样的规律将数据反向转换成信息。

现代生活中加密用于各个领域,用户的基本信息也很重要,加密经常用于用户的重要信息的保存和传输,下面我就来和大家聊聊加密的那些事。

常见的加密方式有哈希(散列)加密、对称加密、非对称加密;

1、哈希(散列)加密

特点:算法公开、对相同的数据加密,得到的结果是一样的。对不同的数据加密,得到的结果是定长的,MD5对不同的数据加密得到的结果都是32位字符;不能反算;可以用于数据摘要。

-MD5

常用于用户密码的加密。用户密码不可以直接在本地保存,也不可以在服务端明文传输,服务器接受到加密的数据后可以保存在数据库。应该确保iOS本地和服务端都只能存储加密后的数据。App不可以具备找回密码功能,只能通过手机验证码验证重新设置新密码。

百度搜索功能当中也用到了MD5,他会对输入框的内容拆分字段进行MD5加密,即使不同顺序的搜索内容也可以当成一样的搜索内容来做处理,降低了搜索的复杂度。

MD5可以对任何数据进行加密,包括图片、视频、音频、文本、字串等等... 。因其加密具有唯一性 可以用这个特点做出来识别资料是否为正版,相同文件的拷贝资料MD5加密数据一样,而录拍翻拍资料MD5加密就有很大的差别。

客户端与服务器端的数据断点传输中可以用MD5加密的字段作比较判断数据是否传输完成;也可以通过MD5字段比较确认用户是否重复传输同一个文件数据。

md5 -s "string"  终端命令  获得32个字符的MD5散列字符串

md5 file.dat  终端命令 文件的MD5散列结果

-SHA1

echo -n "string" | openssl sha -sha1  终端命令 获得40个字符的SHA1散列字符串

openssl sha -sha1 file.dat  终端命令 得到40个字符的SHA1散列字符串

-SHA256\512

echo -n "string" | openssl sha -sha256 终端命令 获得64个字符的SHA256散列字符串

openssl sha -sha256 file.dat  终端命令 计算文件得到64个字符的SHA256散列字符串

echo -n "string" | openssl sha -sha512 终端命令 获得128个字符的SHA 512散列字符串

openssl sha -sha512 file.dat  终端命令 计算文件的SHA512散列结果,获得128个字符的SHA 512散列字符串

2、对称加密

加密和解密使用同一个秘钥;

-DES

早期的经典加密算法,是数据加密的标准,因加密强度不够现在用的不多。

-3DES

使用3个秘钥,对相同的数据执行3次加密,强度增强。

-AES

高级加密标准,目前美国国家安全局使用AES加密,苹果公司的钥匙串访问就是使用AES加密。

ECB: 电子代码本,就是将一个数据拆分为多块,然后独立加密的!

$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin 终端加密

$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.bin -out msg1.txt -d 终端解密

$ xxd msg1.bin    查看加密后的二进制文件

CBC: 密码块链,使用一个密钥和一个初始化"向量"对数据执行加密抓换。能保证密文的完整性,如果一个数据发生改变,后面所有的数据将会被破坏! 现代的密码学都和几何有关!因为几何(包含圆形\椭圆\球体)的变量是有规律的,但是结果是多变的!

$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in a.txt -out msg1.bin  终端加密

$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.bin -out msg4.txt -d 终端解密

$ xxd msg1.bin 查看加密后的二进制文件

3、非对称加密

公钥加密私钥解密、私钥加密公钥解密。非对称加密很安全,但是对大量数据加密很慢,速度慢。

RSA

原理:找出两个“很大”的质数:P & Q;N = P * Q;M = (P – 1) * (Q – 1);找出整数E,E与M互质,即除了1之外,没有其他公约数;找出整数D,使得E*D除以M余1,即 (E * D) % M = 1;

加密:(X ^ E) % N = Y;X是明文;Y是密文

解密:(Y ^ D) % N = X;Y是密文;X是明文

不论给出多少份明文和对应的密文,也无法根据已知的明文和密文的对应关系,破译出下一份密文;N和E可以公开给任何人加密使用,但是只有掌握密钥D的人才可以解密,即使加密者自己也无法解密。可以产生很多的公钥E和私钥D的组合给不同的加密者。RSA算法有两个作用一个是加密一个是数字签名。

----------------------------------------------我是分割线-----------------------------------------------

数据加密在iOS App场景中的运用

-登录注册

用户输入密码后应当立刻给密码加密,客户端和后台服务端都不应该明文保存数据。

1、MD5 加盐

在这里大家用的最多的就是MD5加密方式。MD5加密后具有唯一识别性,加密数据被泄露后同样不够安全。早期开发者会使用加盐方式,给加密数据加盐后再传输给后端。就这要求iOS、安卓、后台保持同样一份加盐数据 才能正确识别。而且这个盐是固定不变,前后端高度统一 安全性不够高。 

 MD5逆向获取明文网站:点我试试 

2、HMAC

给定一个密钥,对明文进行密钥拼接,并且做"两次散列" -> 得到32位结果!

用户在注册的那一刻,向服务器索取 密钥(key); 客户端拿到KEY的这一刻,就将KEY保存在本地;切换了新的设备(换手机登录,登录新的已有账号!) -- 重新找服务器获取!!QQ就是采用这个方式,换设备登录获取不到原来的key,需要原设备授权后台才能给新设备这个KEY,授权方包含手机验证码和密保问题。

3、密文时效性

厉害的黑客可以模拟网络拿到加密后密码,可以同样进行数据访问。如果我们将传输和验证过程添加时效性那就可以大大避免这种风险。客户端在发送数据时候加上时间数据精确到分钟,客户端拿到数据后可以进行时间验证 误差在正负一分钟内的数据为安全数据。 (Pass + '201806132020')md5 == (Pass + '201806132020')md5 

4、钥匙串数据保存本地

 苹果的"生态圈",从 iOS7.0.3 版本开放给开发者; 功能:在Mac上能够动态生成复杂密码,帮助用户记住密码;如果用户访问网站,记住密码,我们还可以看到记住的密码明文!明文记录;本身的所有接口都是 C 语言的.借助三方库;采用的加密方式是 AES 加密! 可以开启手机icould钥匙串备份 永久不会丢失。

5、iOS指纹识别

#import <LocalAuthentication/LocalAuthentication.h>

LAContext * ctx = [[LAContext alloc]init];

    //判断设备是否支持指纹识别

    if ([ctx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL]) {

        //输入指纹

        [ctx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹支付" reply:^(BOOL success, NSError * _Nullable error) {

            NSLog(@"%d %@",success,error);

        }];

    }else{

        NSLog(@"不支持");

    }

指纹:代表你是这个手机的主人;    密码:代表你是这个账号的主人。


-数据报文传输

很多支付相关的订单信息需要很高的安全性,在传输中要确保数据不能被篡改。iOS客户端需要用到更多的加密方式。

数据发送方:"报文" HASH 得到 "报文摘要","报文摘要" 用公钥加密(数字签名) + 报文。

数据接收方:"报文" HASH 得到 "报文摘要","数字签名" 用私钥解密 判断是否与 "报文摘要" 相同。

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

推荐阅读更多精彩内容