美文网首页
常用加密算法

常用加密算法

作者: __XY__ | 来源:发表于2018-10-08 17:43 被阅读0次

概述

  • 摘要算法: 不可逆,固定长度,主要用于完整性检测,数据安全存储,比如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

相关文章

网友评论

      本文标题:常用加密算法

      本文链接:https://www.haomeiwen.com/subject/znpjaftx.html