共计 2948 个字符,预计需要花费 8 分钟才能阅读完成。
一。对称加密
1. 什么叫对称加密
对称加密就是发信方利用一种算法把密钥 key 和明文 message 进行非凡加密,而后把加密的密文发送进来;接管方必须晓得这个密钥 key,利用同样的算法,进行解密成可读的明文。所以单方都必须晓得这个 key
2. 常见的几种对称加密算法:DES、TripleDES、RC2、RC4、RC5 和 Blowfish 等
经典加密算法有三种:
- DES(Data Encryption Standard):数据加密规范(当初用的比拟少,因为它的加密强度不够,可能暴力破解)
- 3DES:原理和 DES 简直是一样的,只是应用 3 个密钥,对雷同的数据执行三次加密,加强加密强度。(毛病:要保护 3 个密钥,大大增加了保护老本)
- AES(Advanced Encryption Standard):高级加密规范,目前美国国家安全局应用的,苹果的钥匙串拜访采纳的就 AES 加密。是当初公认的最平安的加密形式,是对称密钥加密中最风行的算法。
二. 非对称加密
经典的非对称加密 RSA
简介:
- 非对称加密算法又称古代加密算法。
- 非对称加密是计算机通信安全的基石,保障了加密数据不会被破解。
- 非对称加密算法须要两个密钥:公开密钥(publickey) 和公有密(privatekey)
- 公开密钥和公有密钥是一对
如果用公开密钥对数据进行加密,只有用对应的公有密钥能力解密。
如果用公有密钥对数据进行加密,只有用对应的公开密钥能力解密。
特点:
算法强度简单,安全性依赖于算法与密钥。
加密解密速度慢。
与对称加密算法的比照:
对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方晓得密钥。
非对称加密有两种密钥,其中一个是公开的。
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 = AES.encrypt(JSON.stringify({"name": "zhao.cuiping"}), "gegee9999").toString()
console.log("enData=", enData)
const deDataBytes = AES.decrypt(enData, "gegee9999")
console.log("deDataBytes=",deDataBytes)
console.log("deData=", 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 = {"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);
正文完
发表至: javascript
2021-09-02