前端加密处理,对称和非对称

非对称和对称加密两者结合(个人理解):
后端非对称加密生成 公钥1 私钥1

1、前端拿到公钥1

2、前端对称加密 生成 对称密钥 ,再用对称密钥加密 隐私数据

3、前端用非对称加密的公钥1加密密钥得到 新的密钥

4、前端把 新的密钥、加密后的数据 传递后端

5、后端用私钥1解密 新的密钥 得到 密钥,再用这个对称密钥解密加密数据得到原始数据

前端展示加密数据时候:
1、前端非对称生成公钥1、私钥1
2、前端请求接口加上公钥1
3、后端收到公钥1,然后生成对称密钥,对称密钥加密数据,
用公钥1加密对称密钥得到新的密钥,然后将加密后的数据和新的密钥传递给前端
4、前端然后用私钥1来解密新的密钥,然后得到对称密钥,再解密加密数据得到原始数据

JSEncrypt 加密解密 对称

下载
npm i jsencrypt

大家可以自己 在线生成密钥对 来试试

生成密钥对

// JSEncrypt 随机生成  公钥、私钥
export function createKey() {
  const crypt = new JSEncrypt({ default_key_size: 1024 });
  const publicDer = crypt.getPublicKey(); //公钥
  const privateDer = crypt.getPrivateKey(); //私钥
  return { publicDer, privateDer };
}

加密

import { JSEncrypt } from 'jsencrypt'
// 公钥
const key = `xxxx`
// 加密
export function setEncrypt (msg) {
  const jsencrypt = new JSEncrypt()
  jsencrypt.setPublicKey(key)
  return jsencrypt.encrypt(msg)
}

解密

// 私钥
const privateKey = `xxxx`
// 解密
export function decrypt (msg) {
  let decrypt = new JSEncrypt()
  decrypt.setPrivateKey(privateKey)
  var decryptMsg = decrypt.decrypt(msg)
  return decryptMsg
}

node-rsa 加密解密 非对称 可以动态生成密钥

下载
npm i node-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, 'pkcs1-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
*/

前后端加密流程

1、生成密钥:首先,后端服务器需要生成一对密钥,包括公钥和私钥。公钥用于加密数据,私钥用于解密数据。这些密钥通常在服务器端安全地生成和存储。
2、传输公钥:在建立安全连接时,后端服务器会将公钥发送给前端。前端使用这个公钥来加密敏感数据,确保数据在传输过程中的安全性。
3、前端加密:前端在发送敏感数据(如用户密码、个人信息等)之前,会使用后端提供的公钥对这些数据进行加密。加密后的数据称为密文,它无法被未授权的人员轻易解密。
4、传输密文:前端将加密后的密文通过网络发送给后端服务器。由于密文是加密的,因此在传输过程中即使被截获,也无法直接获取到原始数据。
5、后端解密:后端服务器接收到加密的密文后,使用自己的私钥对密文进行解密,还原出原始的数据。这样,后端服务器就可以对解密后的数据进行处理,如验证用户密码、存储用户信息等。
6、响应加密:后端服务器在返回响应数据给前端时,同样需要使用公钥对数据进行加密,以确保响应数据的安全性。
7、前端解密:前端接收到后端返回的加密响应数据后,使用之前保存的私钥进行解密,得到原始的响应数据。
通过这个过程,前后端之间可以确保数据的传输和处理过程中的安全性。需要注意的是,在实际应用中,前后端加密操作的具体实现可能会因使用的加密算法和框架而有所不同。同时,为了保障安全性,还需要采取其他安全措施,如HTTPS协议、访问控制等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值