概述
- 摘要算法: 不可逆,固定长度,主要用于完整性检测,数据安全存储,比如sha1,md5。
- 对称加密: 加密解密使用相同的密钥,但是在密钥交换的过程中要使用非对称加密。
- 非对称加密:加密解密使用不同的密钥,但是肯定是速度比较慢。
摘要算法:
常用的摘要算法有MD5,SHA1。摘要算法是一个不可逆过程,就是无论多大数据,经过算法运算后都是生成固定长度的数据,一般结果使用16进制进行显示。
MD5和SHA1的区别:
MD5结果是128位摘要,即16个字节,用十六进制表示的话就是32个字符。
SHa1是160位摘要。即20个字节,用十六进制表示就是40个字符。
SHa256是256位摘要。即32个字节,用十六进制表示就是64个字符。
那么MD5的速度更快,而SHA1的强度更高。
摘要算法用途:
- 消息完整性:由于每一份数据生成的MD5值不一样,因此发送数据时可以将数据和其MD5值一起发送,然后就可以用MD5验证数据是否丢失、修改。
- 安全访问认证:这是使用了算法的不可逆性质,(就是无法从MD5值中恢复原数据)对账号登陆的密码进行MD5运算然后保存,这样可以保证除了用户之外,即使数据库管理人员都无法得知用户的密码。
- 数字签名:这是结合非对称加密算法和CA证书的一种使用场景。
摘要算法代码:
In [22]: import hashlib
In [23]: hashlib.md5(b'hello').hexdigest()
Out[23]: '5d41402abc4b2a76b9719d911017c592'
In [24]: hashlib.sha1(b'hello').hexdigest()
Out[24]: 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'
In [25]: hashlib.sha256(b'hello').hexdigest()
Out[25]: '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'
In [26]: len('5d41402abc4b2a76b9719d911017c592')
Out[26]: 32
In [27]: len('aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
Out[27]: 40
In [28]: len('2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824')
Out[28]: 64
对称加密
对称加密算法只是为了区分非对称加密算法。其中鲜明的特点是对称加密是加密解密使用相同的密钥,而非对称加密加密和解密时使用的密钥不一样。对于大部分情况我们都使用对称加密,而对称加密的密钥交换时使用非对称加密,这有效保护密钥的安全。非对称加密加密和解密密钥不同,那么它的安全性是无疑最高的,但是它加密解密的速度很慢,不适合对大数据加密。而对称加密加密速度快,因此混合使用最好。
常用的对称加密算法有:AES和DES.
- DES:比较老的算法,一共有三个参数入口(原文,密钥,加密模式)。目前基本被废除,
而3DES只是DES的一种模式,是以DES为基础更安全的变形,对数据进行了三次加密,也是被指定为AES的过渡算法。
DES废除的原因一个是密钥位数太少,在现在的计算能力下,已经无法保证安全,第二个原因是,DES是为硬件加密设计的,对于现在软件来说计算效率不够好,第三个原因是,一直有人怀疑DES的S盒中隐藏着后门,而这个后门被美国安全局掌握。所以提出了AES - AES:高级加密标准,新一代标准,加密速度更快,安全性更高(不用说优先选择)
对称加密用途
所以一般的HTTPS连接只在第一次握手时使用非对称加密,通过握手交换对称加密密钥,在之后的通信走对称加密。
对称加密代码
# pip install crypto
ln [23]: from Crypto.Cipher import AES
In [24]: e = AES.new(b'asdfasdfasdfasdf',AES.MODE_CBC,b'asdfasdfasdfasdf')
In [25]: d = AES.new(b'asdfasdfasdfasdf',AES.MODE_CBC,b'asdfasdfasdfasdf')
In [26]: a = e.encrypt(b'hellohellohello0')
In [27]: a
Out[27]: b"\xf8\x01\x97\xf0\xda'\xa0O\x8d\x0c;\x88#\xdc\xb5l"
In [28]: d.decrypt(a)
Out[28]: b'hellohellohello0'
几个常用的加密组合
ssh原理
这里进行一下说明:
-
首先服务端会通过非对称加密,产生一个公钥和私钥;
-
在客户端发起请求时,服务端将公钥暴露给客户端,这个公钥可以被任意暴露;
-
客户端在获取公钥后,会先产生一个由256位随机数字组成的会话密钥,这里称为口令;
-
客户端通过公钥将这个口令加密,发送给服务器端;
-
服务器端通过私钥进行解密,获取到通讯口令;
-
之后,客户端和服务端的信息传递,都通过这个口令进行对称的加密。
18161540_1yaB.png
https 加密原理
第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。
第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。
参考
https://blog.csdn.net/u013565368/article/details/53081195
http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
网友评论