对称加密

一。对称加密
1. 什么叫对称加密
对称加密就是发信方利用一种算法把密钥key和明文message进行特殊加密,然后把加密的密文发送出去;接收方必须知道这个密钥key,利用同样的算法,进行解密成可读的明文。所以双方都必须知道这个key
2.常见的几种对称加密算法:
DES、TripleDES、RC2、RC4、RC5和Blowfish等
经典加密算法有三种:

  1. DES(Data Encryption Standard):数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)
  2. 3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)
  3. AES(Advanced Encryption Standard):高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。
二.非对称加密
经典的非对称加密RSA
简介:
  1. 非对称加密算法又称现代加密算法。
  2. 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。
  3. 非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
  4. 公开密钥和私有密钥是一对
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。
特点:
算法强度复杂,安全性依赖于算法与密钥。
加密解密速度慢。
与对称加密算法的对比:
对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。
非对称加密有两种密钥,其中一个是公开的。
RSA应用场景:
由于RSA算法的加密解密速度要比对称算法速度慢很多,在实际应用中,通常采取
数据本身的加密和解密使用对称加密算法(AES)。
用RSA算法加密并传输对称算法所需的密钥。
三。其他加密
1.MD5加密
【对称加密】2.SHA加密
3.HMAC加密
四。js实例
1.AES 对称加密
//安装crypto-js 库, npm install crypto-js -S,里面有很多加密算法import CryptoJS from "crypto-js" import AES from "crypto-js/aes"const enData = https://www.it610.com/article/AES.encrypt(JSON.stringify({"name": "zhao.cuiping"}), "gegee9999").toString() console.log("enData="https://www.it610.com/article/, enData) const deDataBytes = AES.decrypt(enData,"gegee9999") console.log("deDataBytes=",deDataBytes) console.log("deData="https://www.it610.com/article/, deDataBytes.toString(CryptoJS.enc.Utf8))

2.RAS 非对称加密
需要在linux 上,使用openssl 命令生成一对秘钥: 公钥和秘钥
先生成私钥:openssl genrsa -out rsa_1024_priv.pem 1024
利用私钥生成公钥: openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
// 安装jsencrypt 库 : npm install jsencrypt -S //被加密的信息 import JSEncrypt from "jsencrypt" let data = https://www.it610.com/article/{"name": "zhao.cuiping"}//公钥 let pub_key = `-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCigl9qBi6/wNAZLbU/P+7t6AvIyHHHdiOmbbInHrv1ihRXFCpTQLHBg7MoImLGiS858i43T2sMSWnWfG5wfasLtblDPqodL7/O50Z5urICs3/WlbK/qeluHKVwhC3wfq+y1gdOQf+90GFOi3uyF03UhYSiyFlLpfTR13vwR8LBNwIDAQAB -----END PUBLIC KEY-----`; //私钥 let private_key = `-----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMvbPyPuExTOqhjouNe8Y6DzGIWwFVPxQRNAQ56NNBYy67nKmr2YB44UXz49AUTagbjikQyJHvmcL6tnJtNwEKc2yrrtag1NY25oENOoGIC+ts0iTTiuvus0IOGy6m6LxGrlN9SvW8nCw3m3L0XDZnx6XyTxBu8J0m0HUJTI5zUBAgMBAAECgYBFWlmox54GPijwQHxiKN1cLFfzY2xeGn2hJwPaNP+7bad0ldD/H3GyjIu6iNadrhjj5XCjayL2mIQ/M+Cpnj6LiLvmEIlSqRy6X4hV/DbesVWvfFv+QnFV53wo5oEwGS8BxED11lbEVY59B6UWpPCNrWVSOaQhtgt3A23bw9MwgQJBAPkJdVodDqx5A4f0RejFj8J4mFWToMaQdaqp1QrzkHoFH0pe8Gq2JGME32FAc5QIa4J8iLPUiSqK0G6gEC0Igv0CQQDRjmXbgX+/sbPxcOe2isF+cXOyahvUKWcyuu0HAqQU4W546+G0SjgzWJ00YajTtJBNjTCBR8L8+zjaxOtIkcNVAkB/+IFKPjZFIKZU3YxzEdpO14OILiVnA+LDQSRNzV1HpowuvlySqWhHTcCwC9uYjT8ZvX7N0gBuUQjMYAoP6hjNAkB7NdNztXdsOUqIqg7DSGAuPPx+qV7FZraToE5e8dGRqV4v4NjrDTxwDCkaNFV0bFTwFBSx3oSqA/fQwTlpiLKlAkEAhbyo9sJAbo2RFo3trIPCpufgAlgHl45aDimleZbko5nC100R7t6rUUs5itzjiY1Psn0yb6darH3dXx0o795Jlg== -----END PRIVATE KEY-----`; //new JSEncrypt let js_encrypt = new JSEncrypt(); //初始化公钥 js_encrypt.setPublicKey(pub_key); //初始化私钥 js_encrypt.setPrivateKey(private_key); //通过 公钥 加密 let encrypted = js_encrypt.encrypt(JSON.stringify(data)); console.log("非对称加密后的=", encrypted); //通过 私钥 解密 let uncrypted = js_encrypt.decrypt(encrypted); console.log("非对称解密后的=", uncrypted);

    推荐阅读