当前位置:首页 > 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模块实现:

js实现cbc加密

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
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…