首页 > 编程语言 >window.crypto.subtle 实现AES-128对称加密算法

window.crypto.subtle 实现AES-128对称加密算法

时间:2024-12-05 22:23:23浏览次数:9  
标签:CBC AES crypto iv window 128 加密算法

window.crypto.subtle 支持AES-128对称加密算法。AES(高级加密标准)是一种广泛使用的对称加密算法,它有三种密钥长度:128位、192位和256位。在Web Crypto API中,你可以选择不同的密钥长度来生成AES密钥。

以下是一个使用AES-128-CBC模式的加密和解密示例:

async function generateKey() {
    return await window.crypto.subtle.generateKey(
        {
            name: "AES-CBC",
            length: 128, // 使用128位密钥
        },
        true, // 是否可导出
        ["encrypt", "decrypt"] // 使用密钥的操作
    );
}

function generateIV() {
    return window.crypto.getRandomValues(new Uint8Array(16)); // 128位IV
}

async function encryptData(key, data, iv) {
    const encodedData = new TextEncoder().encode(data);
    return await window.crypto.subtle.encrypt(
        {
            name: "AES-CBC",
            iv: iv,
        },
        key,
        encodedData
    );
}

async function decryptData(key, encryptedData, iv) {
    const decryptedData = await window.crypto.subtle.decrypt(
        {
            name: "AES-CBC",
            iv: iv,
        },
        key,
        encryptedData
    );
    return new TextDecoder().decode(decryptedData);
}

// 使用示例
(async () => {
    const key = await generateKey();
    const iv = generateIV();
    const data = "Hello, World!";
    const encryptedData = await encryptData(key, data, iv);
    const decryptedData = await decryptData(key, encryptedData, iv);
    console.log("Decrypted Data:", decryptedData);
})();

在这个示例中,generateKey 函数生成了一个128位的AES密钥。然后,encryptDatadecryptData 函数分别用于加密和解密数据。需要注意的是,AES-CBC模式需要使用一个初始化向量(IV),并且每个消息应该使用唯一的IV。

注意事项

  • IV 唯一性:对于AES-CBC模式,每个消息应该使用唯一的IV,以避免重放攻击。
  • 填充:AES是块加密算法,因此需要处理不足一个块大小的数据。AES-CBC模式通常使用PKCS7填充。
  • 性能:AES-CBC模式不支持并行处理,因此在处理大量数据时可能比AES-GCM模式慢。

通过window.crypto.subtle,你可以在前端应用中使用AES-128对称加密算法来保护数据的安全性。不过,通常情况下,前端加密操作应该与后端配合使用,确保整体系统的安全性。前端主要负责传输加密数据,而敏感数据的加密和解密操作最好在服务器端完成。

标签:CBC,AES,crypto,iv,window,128,加密算法
From: https://www.cnblogs.com/jocongmin/p/18589530

相关文章

  • 使用 `window.crypto.subtle.digest` 为字符串生成SHA-256哈希签名
    使用window.crypto.subtle.digest方法,可以为字符串生成哈希签名。以下是一个示例,演示如何为字符串生成SHA-256哈希值:asyncfunctiongenerateHash(text){//将文本编码为UTF-8字节数组constencoder=newTextEncoder();constdata=encoder.encode(text......
  • window.crypto.subtle 实现非对称加密RSA-OAEP
    使用window.crypto.subtle,可以实现非对称加密(也称为公钥加密)。非对称加密使用一对密钥:公钥用于加密数据,私钥用于解密数据。以下是一个示例,演示如何使用window.crypto.subtle实现非对称加密和解密:生成密钥对首先,生成一个RSA密钥对:asyncfunctiongenerateKeyPair(){r......
  • 【RAS非对称加密算法】DEMO原理与示例
    fromCrypto.PublicKeyimportRSAfromCrypto.CipherimportPKCS1_OAEP#生成RSA密钥对defgenerate_rsa_keys():"""公钥是通过特定算法从私钥导出的,可以安全地公开。公钥用于加密数据或验证签名。私钥用于解密数据或生成签名。""......
  • Crypto (Crypto Driver)
    IntroductionTheCryptoDriver(CRYPTO)iscalledbytheCryptoInterface(CRYIF)andperformsthespecificcryptographicfunctionality.TheCRYPTOspecification[1]offersasupersetofalgorithmswhichcanbeextendedby‘customalgorithms’.Thissoftw......
  • CryptographyDeprecationWarning: Python 2 is no longer supported by the Python co
    警告CryptographyDeprecationWarning:Python2isnolongersupportedbythePythoncoreteam.Supportforitisnowdeprecatedincryptography,andwillberemovedinthenextrelease.低版本pipinstallcryptography==2.6可能不适......
  • 薛定谔Maestro-分子对接另一个软件
    可以网上下载翻版的,但是发文章或者什么使用最好的单位已经购买的,很多软件都有这样的问题,需要了解一下是不是开源的这个太久没有用都有点忘记了,需要翻开笔记一点点对一下然后开始记录纸质的笔记除了实验步骤其他的都不是很方便呀,不够形象,没有图片观看怎么点击我就是傻瓜式的......
  • 深入 HarmonyOS Next 安全机制之加密算法
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)中加密算法相关技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。第一章:加密算法原理剖析一......
  • AES加密算法原理详解
    AES加密:高级加密标准(AES,AdvancedEncryptionStandard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:明文p::::info没有经过加密的数据。:::密钥K::::info用来加密明文的密码,在......
  • 全面解析:常见加密算法及其应用
    加密算法是一种用数学方法对数据进行变换的技术,目的是保护数据的安全,防止被未经授权的人读取或修改。加密算法可以分为三大类:对称加密算法、非对称加密算法和哈希算法(也叫摘要算法)。日常开发中常见的需要用到加密算法的场景:保存在数据库中的密码需要加盐之后使用哈希算法(比......
  • 基于数据可视化+加密算法+Javaweb的图书管理系统设计与实现
    文章目录1.内容见下图2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.内容见下图2.详细视频演示文章......