使用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
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Forge.js对数据进行加密需要执行以下步骤: 1. 将需要加密的数据转换为字符串形式。 2. 创建一个RSA公钥对象,可以通过Forge.js的`pki.publicKeyFromPem()`方法从公钥PEM格式字符串中创建。 3. 将需要加密的数据转换为Uint8Array数组类型。 4. 使用RSA公钥对象的`encrypt()`方法对数据进行加密,得到加密后的结果。 下面是一个使用Forge.js对数据进行加密的示例代码: ```javascript const forge = require('node-forge'); // 公钥PEM格式字符串 const publicKeyPem = '-----BEGIN PUBLIC KEY-----\n' + 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsEJ3J6m4OvX5Ualgiqzq\n' + '...(此处省略公钥内容)\n' + '-----END PUBLIC KEY-----\n'; // 需要加密的数据 const data = 'Hello, World!'; // 创建RSA公钥对象 const publicKey = forge.pki.publicKeyFromPem(publicKeyPem); // 将数据转换为Uint8Array数组类型 const dataBytes = forge.util.encodeUtf8(data); const dataBuffer = forge.util.createBuffer(dataBytes); const dataUint8Array = new Uint8Array(dataBuffer.getBytes()); // 使用RSA公钥对象对数据进行加密 const encrypted = publicKey.encrypt(dataUint8Array); // 将加密后的结果转换为Base64编码字符串 const encryptedBase64 = forge.util.encode64(encrypted); console.log(encryptedBase64); // 输出加密后的结果 ``` 在以上示例代码中,使用`forge.util.encodeUtf8()`方法将数据转换为UTF-8编码的字节数组,然后再使用`forge.util.createBuffer()`方法将字节数组转换为Buffer对象,最终使用`new Uint8Array()`方法将Buffer对象转换为Uint8Array数组类型。 使用RSA公钥对象的`encrypt()`方法对数据进行加密后,得到的结果是一个字节数组类型,可以使用`forge.util.encode64()`方法将其转换为Base64编码字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值