当前位置:首页 > JavaScript

js实现cbc加密

2026-02-03 08:25:16JavaScript

使用JavaScript实现CBC加密

在JavaScript中实现CBC(Cipher Block Chaining)模式加密,通常需要结合加密算法如AES。以下是使用Web Crypto API实现AES-CBC加密的示例:

async function encryptCBC(plaintext, key, iv) {
    const encoder = new TextEncoder();
    const encodedData = encoder.encode(plaintext);

    const cryptoKey = await window.crypto.subtle.importKey(
        'raw',
        key,
        { name: 'AES-CBC' },
        false,
        ['encrypt']
    );

    const encryptedData = await window.crypto.subtle.encrypt(
        {
            name: 'AES-CBC',
            iv: iv,
        },
        cryptoKey,
        encodedData
    );

    return new Uint8Array(encryptedData);
}

参数说明

  • plaintext: 需要加密的文本数据。
  • key: 加密密钥,需为16、24或32字节(对应AES-128、AES-192、AES-256)。
  • iv: 初始化向量(IV),固定为16字节。

示例调用

const key = new Uint8Array(16); // 16字节密钥(AES-128)
const iv = new Uint8Array(16);  // 16字节IV
const plaintext = "Hello, CBC!";

encryptCBC(plaintext, key, iv)
    .then(encrypted => console.log("加密结果:", encrypted))
    .catch(err => console.error("加密失败:", err));

解密实现

解密过程与加密类似,使用decrypt方法:

async function decryptCBC(ciphertext, key, iv) {
    const cryptoKey = await window.crypto.subtle.importKey(
        'raw',
        key,
        { name: 'AES-CBC' },
        false,
        ['decrypt']
    );

    const decryptedData = await window.crypto.subtle.decrypt(
        {
            name: 'AES-CBC',
            iv: iv,
        },
        cryptoKey,
        ciphertext
    );

    return new TextDecoder().decode(decryptedData);
}

注意事项

  1. IV安全性: IV需随机生成且每次加密不同,不可重复使用。
  2. 密钥管理: 密钥需安全存储,避免硬编码。
  3. 环境支持: Web Crypto API在现代浏览器中可用,Node.js需使用crypto模块。

Node.js实现

在Node.js中可通过内置crypto模块实现:

const crypto = require('crypto');

function encryptCBC(plaintext, key, iv) {
    const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
    let encrypted = cipher.update(plaintext, 'utf8', 'hex');
    encrypted += cipher.final('hex');
    return encrypted;
}

以上方法提供了在浏览器和Node.js环境中实现AES-CBC加密的核心逻辑。

js实现cbc加密

标签: jscbc
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…