主要介绍两种加密方法:对称加密和非对称加密 对称加密:加密和解密过程使用同一个秘钥。加密过程等价于用原文+秘钥得到传输的密文,解密过程等价于密文+秘钥推导出原文。 常见算法有:DES、AES… 优点:加密和解密速度较快,耗时短,适合数据较长时使用;秘钥可自定义。 缺点:无法保证秘钥被安全传递,密文在传输过程中可能被第三方截获,如果秘钥也被截获,则传输的密码信息会被推导出,安全性较低。
AES秘钥在线
const CryptoJS = require('crypto-js')
function aesEncrypt(data, keys, ivs) {
const res = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(keys), {
iv: CryptoJS.enc.Utf8.parse(ivs),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
})
return res.toString()
}
function desDecrypt(data, keys, ivs) {
const res = CryptoJS.AES.decrypt(data, CryptoJS.enc.Utf8.parse(keys), {
iv: CryptoJS.enc.Utf8.parse(ivs),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
})
return res.toString()
}
非对称加密:加密和解密过程使用两个秘钥,一般使用公钥进行加密,私钥进行解密。 常见算法有:RSA、背包算法、ECC… 优点:使用一对秘钥,公钥用来加密,私钥用来解密,不需要像对称加密那样同步秘钥,而且只能通过私钥来推导公钥,反之则不能,安全性较高。 缺点:加密和解密花费的时间较长、速度较慢,适合对少量数据的使用。
RSA秘钥在线生成
import JSEncrypt from 'jsencrypt'
const pubKey = 'xxx'
const priKey = 'xxx'
function rsaEncrypt(data){
const encrypt = new JSEncrypt()
encrypt.setPublicKey(pubKey)
return encrypt.encrypt(data)
}
function rsaDecrypt(data){
const decrypt = new JSEncrypt()
decrypt.setPrivateKey(priKey)
return decrypt.decrypt(data)
}
非对称加密和对称加密的区别 前端利用jsencrypt.js进行RSA加密
|