很多时候我们与后台的交互数据需要保证安全性,这个时候就需要将传给后台的数据进行加密,这里我们使用node.forge.js进行加密传输。
Node-forge在加密和解密方面提供了许多好处,主要体现在以下几个方面:
跨平台兼容性:Node-forge可以在多种环境中使用,包括服务器端(如Node.js)和客户端(如浏览器中的JavaScript)。这为开发跨平台应用提供了便利。
支持多种加密算法:它支持包括AES、RSA在内的多种加密算法,这使得开发人员可以根据需要选择最合适的算法进行安全通信。
提供高级加密功能:例如,它支持公钥和私钥的生成,以及基于这些密钥的加密和签名操作。这种非对称加密机制对于保护数据安全至关重要。
易于使用:Node-forge提供了清晰的接口文档和丰富的示例代码,使得开发者即使没有深厚的加密知识背景也能够快速上手和使用这些加密技术。
直接下载资源node-forge.js文件并引入资源
<script type="text/javascript" src="/statics/crypto/node-forge.min.js"></script>
或者使用 npm i node-forge -s 安装
// 安装
npm i node-forge -s
// 引入
const forge = require('node-forge');
定义密钥和偏移量
// 秘钥
const key = 'f4k9f5w7f8g4er26'
// 偏移量 16位
const iv = '0000000000000000'
提示:密钥和偏移量定好后不可随意修改,否则前后端加密解密可能失败
加密代码
function encrypt(someBytes) {
var cipher = forge.cipher.createCipher('AES-GCM', key); // 生成AES-GCM模式的cipher对象 并传入密钥
cipher.start({
iv: iv,
additionalData: 'nvn', // optional
tagLength: 128 // optional, defaults to 128 bits
});
cipher.update(forge.util.createBuffer(forge.util.encodeUtf8(someBytes)));
cipher.finish();
var encrypted = cipher.output;
var tag = cipher.mode.tag;
return btoa(encrypted.data+tag.data)
}
解密代码
function decrypt(someBytes) {
someBytes = atob(someBytes)
// const iv = someBytes.slice(0, 12)
const tag = someBytes.slice(-16)
const data = someBytes.slice(0, someBytes.length - 16)
var decipher = forge.cipher.createDecipher('AES-GCM', key)
decipher.start({
iv: iv,
tag: tag,
additionalData: 'nvn', // optional
tagLength: 128 // optional, defaults to 128 bits
});
decipher.update(forge.util.createBuffer(data))
const pass = decipher.finish()
if (pass) {
return decipher.output.toString()
}
}
加密调用
encrypt(this.password)
// 123456 --> Fhqcy1058R5eKc0N6bOQO0NI5bpipw==
解密调用
decrypt(this.password)
// Fhqcy1058R5eKc0N6bOQO0NI5bpipw== --> 123456