14.常见的3种加密算法:对称加密、非对称加密、Hash摘要加密

1. 对称加密算法

对称加密算法(Symmetric Encryption Algorithm)指的是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。

优点:算法简单,加密解密容易,效率高,执行快。

缺点:相对来说不算特别安全,只有一把钥匙,密文如果被拦截,且密钥也被劫持,那么,信息很容易被破译。

常见的对称加密算法:DES,AES,3DES,Blowfish,IDEA,RC4,RC5,RC6等等。

  • DES(Data Encryption Standard-数据加密标准):现在用的比较少,因为它的加密强度不够,能够暴力破解。
  • 3DES(Triple Data Encryption Algorithm-三重数据加密算法):原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本) 
  • AES(Advanced Encryption Standard-高级加密标准):目前美国国家安全局使用的,苹果的钥匙串访问采用的就是AES加密。是现在公认的最安全的加密方式,是对称加密中最流行的密钥算法。
  • Blowfish(河豚算法):布鲁斯·施奈尔于1993年开发的区块加密算法。

应用场景:登录信息用户名和密码加密、传输加密、指令加密(如扣款、下单操作)。

2. 非对称加密算法

非对称加密算法(Asymmetric Encryption Algorithm)指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。

优点:安全,即使密文被拦截、公钥被获取,但是无法获取到私钥,也就无法破译密文。作为接收方,务必要保管好自己的密钥。

缺点:加密算法及其复杂,安全性依赖算法与密钥,而且加密和解密效率很低。

常见的非对称加密算法:RSA,ECC,DSA,Diffie-Hellman,El Gamal等等。

应用场景:HTTPS(SSL)证书制作、CRS请求证书、金融通信加密、蓝牙等硬件信息加密配对传输、关键的登录信息验证。

3.Hash摘要加密算法

Hash摘要加密算法是一种单向摘要加密算法,直译为哈希摘要或散列摘要。严格意义上,Hash摘要加密算法既不是编码算法,也不是加密算法,而是摘要算法。Hash摘要算法是一种非可逆算法,所以只负责加密,不负责解密,最常见的是用于数据唯一完整性的校验。

常见的Hash摘要算法:MD5,SHA,HMAC,MD2,MD4,SHA-1,SHA-256,HAVAL等等。

MD5(Message Digest Algorithm 5-消息摘要算法)指的是对一段信息(Message)产生信息摘要(Message-Digest),MD5长度为128位,比如,下载服务器针对一个文件预先提供一个MD5摘要,用户下载完该文件后,用MD5算法重新计算下载文件的MD5摘要,通过比较这两个摘要值是否相同,就能判断下载的文件是否出错,或者说下载的文件是否被篡改了。MD5将这个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。MD5的缺点是对相同的数据加密,得到的结果是一样的,所以是极不安全的,不信的话可以到这个网站试试:cmd5网站

SHA(Secure Hash Algorithm-安全哈希算法)指的是SHA,SHA-1,SHA-256等等,与MD5一样,均基于MD4升级开发而来,因此两者很相似,SHA1长度是 160 位 ,SHA256长度是 256 位,是一种比MD5的安全性强的算法。

HMAC(Hash-based Message Authentication Code-基于哈希的消息验证码)指的是利用哈希算法(MD5、SHA1等),以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

应用场景:

  • Hash算法常用在不可还原的密码存储、信息完整性校验。
  • 文档、音视频文件、软件安装包等用摘要值对比是否一样(接收到的文件是否被修改)
  • 用户名或者密码加密后数据库存储(数据库大多数不会存储关键信息的明文,就像很多登录功能的忘记密码不能找回,只能重置)
  • 数字签名和数据检索。

关于Hash加“盐”

为了使MD5更安全,有两个必须考虑的因素: 计算量以及“盐”,每次加密的时候首先会生成一个随机数就是“盐“,之后将这个随机数与密码进行hash,即使同样的密码加密过后也是不同的摘要结果。

比如我的银行密码是”12345″

(1)得到的MD5摘要是:827ccb0eea8a706c4c34a16891f84e7b

(2)一个人截取到这个密文,那么通过撞库肯定容易撞出12345.

(3)我们要做的就是加“盐”,银行密码还是”12345″,然后我把银行密码加上我特定的字符串“盐”再计算MD5摘要。 

所以密码还是那个密码,但是变成求”12345密码加密987″的MD5摘要值,那么这个MD5摘要值起码可以确认数据库不会有。

典型Bcrypt就是加“盐“的方式,具体来说就是在原有材料(用户自定义密码)中加入随机“盐”,当这种“盐“和用户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值。Bcrypt采用的是 Blowfish 算法,相比 MD5 或者 SHA1,这个算法提供了更高的计算量, 同时还有具有良好的伸缩性。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/basic/thinking-in-programming/3685.html

发表评论

登录后才能评论