公钥加密、私钥解密!!!!!
一般情况下,都是公钥加密,私钥解密,我们可以采用jsencrypt !
常用案例
import {
JSEncrypt
} from 'jsencrypt'//公钥加密 私钥解密
export const encrypt = (password) => {
// 公钥加密
let publicKey = '*******'
const encrypt = new JSEncrypt()
encrypt.setPublicKey(publicKey )
let result = encrypt.encrypt(password)
return result
}
// 解密
export function decrypt (txt) {
//私钥解密
const privateKey= '***'
//使用私钥解密
const decrypt = new JSEncrypt()
decrypt.setPrivateKey(privateKey)
let result = decrypt.decrypt(txt)
return result
}
另外一种情况是 私钥加密,公钥解密
这种可以保持加密后的数据不会更改!
实现数据库与前端数据筛选的统一!
我们采用的是 node-rsa依赖
案例
const NodeRSA = require('node-rsa')//私钥加密 公钥解密
// 密码加密
export const encrypt = (password) => {
// 私钥加密
// '-----BEGIN PRIVATE KEY-----\n' '\n-----END PRIVATE KEY-----' 必须写
let publicKey = '-----BEGIN PRIVATE KEY-----\n' + '***' + '\n-----END PRIVATE KEY-----'
const nodersa = new NodeRSA(publicKey);
const decrypted = nodersa.encryptPrivate(password, 'base64', "utf8");
return decrypted
}
// 解密
export function decrypt (txt) {
//公钥解密
let privateKey = '-----BEGIN PUBLIC KEY-----\n' +*** + '\n-----END PUBLIC KEY-----'
try {
const nodersa2 = new NodeRSA(privateKey);
const decrypted2 = nodersa2.decryptPublic(txt, "utf8");
return decrypted2
} catch (error) {
return ''
}
}
如果项目使用 node-rsa 运行报错,可以查看'-----BEGIN PRIVATE KEY-----\n' '\n-----END PRIVATE KEY-----' 这2个字符串中是不是包含RSA字段,去掉即可!