前端AES加密

news/2025/2/11 18:46:45/

AES是一种最常见的对称(加密和解密用相同的密钥)加密算法。crypto模块提供了AES支持,但是需要自己封装好函数,便于使用。

AES加密流程

AES加解密流程

  1. 明文:没有经过加密的数据。
  2. 密钥K:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。
  3. AES加密函数:设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。
  4. 密文C:经加密函数处理后的数据
  5. AES解密函数:设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。
AES的基本结构

AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完所有组。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节。密钥的长度也支持128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。如下表:
在这里插入图片描述
AES-128,也就是密钥的长度为128位,加密轮数为10轮。AES的加密公式为C = E(K,P),在加密函数E中,会执行一个轮函数,并且执行10次这个轮函数,这个轮函数的前9次执行的操作是一样的,只有第10次有所不同。也就是说,一个明文分组会被加密10轮。AES的核心就是实现一轮中的所有操作。

AES的处理单位是字节,128位的输入明文分组P和输入密钥K都被分成16个字节,分别记为P = P0 P1 … P15 和 K = K0 K1 … K15。如,明文分组为P = abcdefghijklmnop,其中的字符a对应P0,p对应P15。

AES程序代码

1、安装模块

npm install crypto-js

2、crypto.js

import CryptoJS from "crypto-js";const key = CryptoJS.enc.Utf8.parse("1234567890abc765"); //16位
const iv = CryptoJS.enc.Utf8.parse("1234567890000000");// AES加密
export function Encrypt(word,keyStr,ivStr){let key = KEY, iv = IV, srcs, encrypted;if (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv= CryptoJS.enc.Utf8..encrypt(ivStr);}srcs= CryptoJS.enc.Utf8.parse(word);encrypted= CryptoJS.AES.encrypt(srcs, key, {iv: iv,mode: CryptoJS.mode.EBC,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.base64.stringify(encrypted.ciphertext); //返回base64格式密文},// AES解密
export function Decrypt(word,keyStr,ivStr){let key = KEY, iv = IV, base64, src, decrypt, decryptedStr;if (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv= CryptoJS.enc.Utf8..encrypt(ivStr);}base64 = CryptoJS.enc.Base64.parse(word);src = CryptoJS.enc.Base64.stringify(base64);decrypt = CryptoJS.AES.decrypt(srcs, key, {iv: iv,mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);return decryptedStr.toString();}

key 是密钥 ,iv 是密钥偏移量,这个一般是接口返回的,或者前后端协定一致。值得注意的是密钥的长度,由于对称解密使用的算法是 AES-128-CBC算法,数据采用 PKCS#7 填充 , 因此这里的 key 需要为16位。

3、使用

import { Encrypt } from "crypto";
let newPassword = Encrypt(password);

注意到AES有很多不同的算法,如aes192,aes-128-ecb,aes-256-cbc等,AES除了密钥外还可以指定IV(Initial Vector),不同的系统只要IV不同,用相同的密钥加密相同的数据得到的加密结果也是不同的。
加密结果通常有两种表示方法:hex和base64,这些功能Nodejs全部都支持,但是在应用中要注意,如果加解密双方一方用Nodejs,另一方用Java、PHP等其它语言,需要仔细测试。如果无法正确解密,要确认双方是否遵循同样的AES算法,字符串密钥和IV是否相同,加密后的数据是否统一为hex或base64格式。

参考
AES加密算法的详细介绍与实现
廖雪峰的官方网站
AES加密算法


http://www.ppmy.cn/news/940379.html

相关文章

Aes加密和解密

AesUtils类如下: import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64;public class AesUtils {private static final String ALGORITHMSTR "AES/ECB/PKCS5Padding";public static Str…

AES加密有什么用,AES加密算法安全性如何

在计算机领域中,信息数据传输的安全一直非常受到关注。在对称加密中,AES加密算法作为DES算法和MD5算法的替代产品,10轮循环到目前为止还没有被破解。那么,AES加密有什么用,AES加密算法安全性如何呢? AES 加…

AES加密与解密

AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的作用与意义: 明文…

AES加密原理

AES (Advanced Encryption Standard,高级加密标准)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范。它是一种分组加密标准,每个加密数据块大小固定为128位(16个字节),最终生成的加密密钥长度有128位、192位和256位这三种…

AES加密

AES (高级加密标准)是由NIST标准化的对称分组密码。它具有16字节的固定数据块大小。它的密钥可以是128、192或256位长。 AES非常快速和安全,它是对称加密的事实上的标准。 例如,可以按以下方式进行加密: >>>…

AES加密/解密

一、AES加密/解密在线工具文档 1.1、AES加密/解密算法介绍 AES加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥,一般用于服务端对服务端之间对数据进行加密/解密。它是…

什么是AES加密?详解AES加密算法原理流程

在密码学中,加密算法分为双向加密和单向加密。单向加密包括MD5、SHA等摘要算法,它们是不可逆的。双向加密包括对称加密和非对称加密,对称加密包括AES加密、DES加密等。双向加密是可逆的,存在密文的密钥。AES算法是DES算法的替代者…

@仓库管理员,这些仓库知识点你知道吗?(上)

仓库担负着物料的进、出及库存的管理,是公司运作的基础,特别是生产制造型企业。仓库负责人无时无刻的强调要做好仓库管理,但是什么样的仓库管理才是好的管理?如何做好仓库管理? 一、仓库管理工作的任务有哪些&#xff…