加密

对称加密

base64加密(可逆)
base64的Github地址

MD5加密(不可逆)
MD5的github地址

sha1加密(不可逆)
sha1的github地址

编码和解码字符串
使用JS函数的escape()和unescape(),分别是编码和解码字符串

非对称加密

非对称加密会产生一对密钥(公钥负责加密、私钥负责解密),私钥无法解开说明公钥无效(抗抵赖性)
加密算法分为对称加密和非对称加密,AES 是对称加密,RSA 是非对称加密

接口加密一般会使用 AES,之所以用 AES 加密是因为效率高
RSA 会慢一些,一般会用做签名认证操作,防止请求被篡改
生成 RSA 密钥对,将生成的公钥私钥复制过去(一般复制公钥即可,私钥给后端)

1. AES

2. RSA

  • jsencrypt 进行 RSA 加密
/* npm i jsencrypt */
import JSEncrypt from 'jsencrypt/bin/jsencrypt'

const publicKey = `非对称加密公钥`
const privateKey = `非对称加密私钥`
const txt = '123'

/* 加密 */
function encrypt(pass) {
  const encrypted = new JSEncrypt() // 创建加密对象实例
  encrypted.setPublicKey(publicKey) // 设置公钥
  return encrypted.encrypt(pass) // 对内容进行加密
}

/* 解密 */
function decrypt(pass) {
  const decrypted = new JSEncrypt() // 创建解密对象实例
  decrypted.setPrivateKey(privateKey) // 设置私钥
  return decrypted.decrypt(pass) // 拿私钥解密内容
}

console.log(decrypt(encrypt(txt))) // '123'

  • node-rsa 进行 RSA 加密

为了增强数据交换的安全性,一般会进行签名和验证操作:
由于客户端的公钥是公开的,发送请求被拦截(中间人), 中间人是可以使用公钥对参数加密,替换拦截到的参数密文,发送给服务端 ,这样就导致服务端无法判断得到的请求是否是可信的客户端发送的了(请求头是对的,但是参数被中间人替换了)

const nodeRSA = require('node-rsa')

// 生成一个1024长度的密钥对
const key = new nodeRSA({ b: 1024 })
const publicKey = key.exportKey('pkcs8-public') // 公钥
const privateKey = key.exportKey('pkcs8-private') // 私钥
const txt = '123'

// 使用公钥加密
function encrypt(data) {
  const pubKey = new nodeRSA(publicKey, 'pkcs8-public')
  return pubKey.encrypt(Buffer.from(data), 'base64')
}

// 使用私钥解密
function decrypt(data) {
  const priKey = new nodeRSA(privateKey, 'pkcs8-private')
  return priKey.decrypt(Buffer.from(data, 'base64'), 'utf8')
}

const sign = encrypt(txt)
const _src = decrypt(sign)

console.log('加密:', sign)
console.log('解密:', _src)
/* 
加密: fBaBFVPv+96I/r6a2tfPbYWa0yjgJKQ+K2/E9obGNo0dYBOSBzW2PgnPOHX+/pq0wUZPxJzcwt5YcMtOsUNuZAYpaPZJ9o6IOEKj823HBNbyerDMUfU3rINCk2FilRuxFpQPmBZTbSvSumKligdtsh1Vz02DwdRgbJHp5bm4Hjk=
解密: 123
*/

// 使用私钥对消息签名
function signRSA(data) {
  const priKey = new nodeRSA(privateKey, 'pkcs8-private')
  return priKey.sign(Buffer.from(data), 'hex')
}

// 使用公钥验证签名
function verifyRSA(decrypt, signs) {
  const pubKey = new nodeRSA(publicKey, 'pkcs8-public')
  return pubKey.verify(Buffer.from(decrypt), signs, 'utf8', 'hex')
}

const signature = signRSA(sign)

console.log('私钥签名:' + signature)
console.log('公钥验证:' + verifyRSA(sign, signature))
/* 
私钥签名:873ae60fa3a5a89850185632b53e54b7c9919d146f2464a857f83679d9862e0612973c891994f6f576d4c04913a8b0a17b9b3adaa3577fcb81d637b2ede0c4a1cffadcaa99b81d09a7edfa69a813cd9f87fe52d96c371f6af533dd5577fdc0f6f7dc6857e1a78d425c0be71f7c440e44e8f932c4ed8890dba007721d10832e92
公钥验证:true
*/

参考文章: https://blog.csdn.net/qq_38689395/article/details/115715761

你可能感兴趣的:(加密)