当前位置:首页 > JavaScript

js实现cbc加密

2026-02-03 08:25:16JavaScript

使用JavaScript实现CBC加密

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

js实现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方法:

js实现cbc加密

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加密的核心逻辑。

标签: jscbc
分享给朋友:

相关文章

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…