使用node.forge.js加密传输

        很多时候我们与后台的交互数据需要保证安全性,这个时候就需要将传给后台的数据进行加密,这里我们使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值