最近的心情很复杂,一开始雄纠纠气昂昂的重新开始,可是后来发现好难。精心下来,发现还是需要不断地充实自己。
密码学的简介
据记载,公元前400年,古希腊人发明了置换密码。1881年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。
加密算法的介绍
密码技术分为两类
对称加密算法
加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。安全系统比较高 只能通过因式分解
主要作用于: 敏感信息。
常见的算法包括:
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
非对称加密算法
采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。
常见的算法包括:
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
散列算法
MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法。
SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值;
特点
NO1、算法公开
NO2、对相同的数据加密,得到的结果是一样的
NO3、对不同的数据加密,得到的结果定长 32位 (a-z 0 -9)
NO4、信息摘要,信息的“指纹“用来做识别
NO5、不能反算
用途
密码,搜索,版权等。
下边着重讲解一下MD5
MD5很多人说其实不算是加密算法,只要算做签名加密
他的一个加密的原理过程如下:
所以在使用MD5加密的时候,客户端服务端在加密之后都不知道明文是什么,只是通过加密后的字段进行存储对比。
MD5现在其实是不太安全的
破解:
== 目前破解的散列只要MD5 ,SHA1 也是在边缘
---散列碰撞,找出不同的数据,使用MD5之后能够得到相同的散列结果。(无数种!!)
基本的MD5安全方式
1、加”盐“ 要求”盐要足够长 足够无序 “加盐是早期的加密方式。现在来说已经不安全。
缺点: 如果用于加盐,在客户端本地存储,要是被破译,会很不安全,同时对于版本的升级也不友好。
HMAC
HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。------ 通俗来讲就是给定一个密钥,对明文进行加密,并且做了“两次散列” -- 32位字符。
使用思路:
服务器端:
1、用户输入账号和密码
2、本地查秘钥,如果没有秘钥,向父亲器获取,(为了安全性,本地存储用KetChain)
这个就相当于一个设备锁,通过本地的秘钥,锁定了设备。有了这个密钥就是有了这个设备,也是目前比较流行的最安全的加密方式。
登录成功记住密码:
1、记住密码直接发送服务器,加密保存 --- 反算解密显示
2、保存密码到本地
服务器:
账号 -- 密码 -- 加密之后的密码
HMAC安全性设置
虽然你使用了HMAC加密,但是中间人还是可以对你的密码等进行攻击,中间人可以得到你的请求地址,自己进行请求获取。
防攻击法术
客服端
(加密后密码 + “当时的日期时间到分”) .MD5 例如当时的时间为 (加密后密码 + “201702241111”).MD5
服务端
(加密之后的密码 + “201702241112”). MD5 || (加密之后的密码 + “201702241111”). MD5 进行匹配对比
小知识点讲解
keyChain -- 钥匙串访问
注意点: 在使用的过程中,需要开启,否则无效
可以使用第三方 SSKeyChain
理解为给我一个密码,告诉我他属于哪个App的账号
SSkeyChain setPasWord:(密码) forSerVice (APP唯一报标识 MD5) :account(账号 加盐)
指纹和密码的区别
指纹只能做暂时二次验证,不能做登录
密码代表你是这个账号的主人! 指纹代表你是这个手机的主人。
可以写的比较乱,但是还是希望不光可以帮助自己,希望也可以帮助大家。