加密算法(DES,AES,RSA,MD5,SHA1)简介
加密技术通常分为两大类:“对称式"和"非对称式”。
一、对称性加密算法
对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。
二、非对称算法
非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。
三、散列算法
Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一地确定输入值。
简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做Hash值.也可以说,Hash就是找到一种数据内容和数据存放地址之间的映射关系。
在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的"散列"或"消息摘要"(Message digest)。散列算法不算加密算法,因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名(当然也有需要公钥私钥的签名)。
四、算法举例
1、对称性加密算法有:AES、DES、3DES
用途:对称加密算法用来对敏感数据等信息进行加密
1.1、DES(Data Encryption Standard)
数据加密标准,速度较快,适用于加密大量数据的场合。
1.2、3DES(Triple DES)
是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
1.3、 AES(Advanced Encryption Standard)
高级加密标准,是下一代的加密算法标准,速度快,安全级别高;AES是一个使用128为分组块的分组加密算法,分组块和128、192或256位的密钥一起作为输入,对4×4的字节数组上进行操作。众所周之AES是种十分高效的算法,尤其在8位架构中,这源于它面向字节的设计。AES 适用于8位的小型单片机或者普通的32位微处理器,并且适合用专门的硬件实现,硬件实现能够使其吞吐量(每秒可以到达的加密/解密bit数)达到十亿量级。同样,其也适用于RFID系统。
2、非对称性算法有:RSA、DSA、ECC
2.1、RSA
由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。RSA在国外早已进入实用阶段,已研制出多种高速的RSA的专用芯片。
- nodejs及web端实现可rsa加密解密以参考:JavaScript的RSA加密库
2.2、DSA(Digital Signature Algorithm)
数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法。
2.3、ECC(Elliptic Curves Cryptography)
椭圆曲线密码编码学。ECC和RSA相比,具有多方面的绝对优势,主要有:抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
2.3.1、ECDSA
is a digital signature algorithm
2.3.2、ECIES
is an Integrated Encryption scheme
2.3.3、ECDH
is a key secure key exchange algorithm
- 对ecc感兴趣的小伙伴可以了解下eccrypto(https://www.npmjs.com/package/eccrypto)及jsrsasign(https://www.npmjs.com/package/jsrsasign)
3、散列算法(签名算法)有:MD5、SHA1、HMAC
Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
2.1、MD5
MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
2.2、 SHA1
是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1设计时基于和MD4相同原理,并且模仿了该算法。SHA-1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的Hash函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。
2.3、HMAC_SHA1
是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。也就是说HMAC是需要一个密钥的。所以,HMAC_SHA1也是需要一个密钥的(即平时说的加盐),而SHA1不需要。
- 用途:主要用于验证,防止信息被修。具体用途如:文件校验、数字签名、鉴权协议
参考
1.【加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用】https://www.cnblogs.com/sochishun/p/7028056.html
2.【MD5 SHA1 HMAC HMAC_SHA1区别】https://www.cnblogs.com/fireway/p/5860622.html
3.【ECDSA vs ECIES vs ECDH】https://crypto.stackexchange.com/questions/12823/ecdsa-vs-ecies-vs-ecdh
4.https://www.npmjs.com/package/eccrypto
5.【Sha256Hash+salt 加密】https://blog.csdn.net/M_Kerry/article/details/82725622
6.【CryptoJS简单使用】http://qefee.com/2016/02/25/CryptoJS%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8/?from=csdn
7.【对称加密、非对称加密、散列(哈希)算法】https://www.cnblogs.com/god-of-death/p/8761281.html