AES加解密流程及方法

js 逆向中CryptoJS常用的加密算法使用及原理 阅读详情

AES加解密流程及方法

流程图

加密

AES方法是支持AES-128、AES-192和AES-256的,加密过程中使用哪种加密方式取决于传入key的类型,否则就会按照AES-256的方式加密

解密

由于加密后的密文为128位的字符串,那么解密时,需要将其转为Base64编码的格式。
那么就需要先使用方法CryptoJS.enc.Hex.parse转为十六进制,再使用CryptoJS.enc.Base64.stringify将其变为Base64编码的字符串,此时才可以传入CryptoJS.AES.decrypt方法中对其进行解密。

流程

首先准备一份明文和秘钥:

var plaintText = 'aaaaaaaaaaaaaaaa'; // 明文
var keyStr = 'bbbbbbbbbbbbbbbb'; // 一般key为一个字符串  
AES方法是支持AES-128、AES-192和AES-256的,加密过程中使用哪种加密方式取决于传入key的类型,否则就会按照AES-256的方式加密。
由于Java就是按照128bit给的,但是由于是一个字符串,需要先在前端将其转为128bit的才行。

最开始以为使用CryptoJS.enc.Hex.parse就可以正确地将其转为128bit的key。但是不然…
经过多次尝试,需要使用CryptoJS.enc.Utf8.parse方法才可以将key转为128bit的。好吧,既然说了是多次尝试,那么就不知道原因了,后期再对其进行更深入的研究。

一、字符串类型的key用之前需要用uft8先parse一下才能用

var key = CryptoJS.enc.Utf8.parse(keyStr);  

  由于后端使用的是PKCS5Padding,但是在使用CryptoJS的时候发现根本没有这个偏移,查询后发现PKCS5Padding和PKCS7Padding是一样的东东,使用时默认就是按照PKCS7Padding进行偏移的。
二、加密

var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});

  由于CryptoJS生成的密文是一个对象,如果直接将其转为字符串是一个Base64编码过的,在encryptedData.ciphertext上的属性转为字符串才是后端需要的格式。
三、转换成base64字符串

var encryptedBase64Str = encryptedData.toString();
console.log(encryptedBase64Str);//'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='

四、需要读取encryptedData上的ciphertext.toString()才能拿到跟Java一样的密文

var encryptedStr = encryptedData.ciphertext.toString();  
console.log(encryptedStr); //'44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' 

  由于加密后的密文为128位的字符串,那么解密时,需要将其转为Base64编码的格式。
那么就需要先使用方法CryptoJS.enc.Hex.parse转为十六进制,再使用CryptoJS.enc.Base64.stringify将其变为Base64编码的字符串,此时才可以传入CryptoJS.AES.decrypt方法中对其进行解密。

五、拿到字符串类型的密文需要先将其用Hex方法parse一下

var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);

六、将密文转为Base64的字符串
只有Base64类型的字符串密文才能对其进行解密

var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  

七、使用转为Base64编码后的字符串即可传入CryptoJS.AES.decrypt方法中进行解密操作

var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});

经过CryptoJS解密后,依然是一个对象,将其变成明文就需要按照Utf8格式转为字符串。

八、解密后,需要按照Utf8的方式将明文转位字符串

var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decryptedStr); // 'aaaaaaaaaaaaaaaa'

方法

var plaintText = 'aaaaaaaaaaaaaaaa'; //明文
var keyStr = 'bbbbbbbbbbbbbbbb'; //一般key为一个字符串 
var key = CryptoJS.enc.Utf8.parse(keyStr);
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
var encryptedStr = encryptedData.ciphertext.toString(); 
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
OpenSSL实战:AES-128-ECB零填充加解密在Linux C中的完整实现与错误排查 对称加密是数据安全的基础技术,其中AES(高级加密标准)作为主流算法,通过固定长度的数据块和密钥对信息进行混淆。其ECB模式原理简单,将明文分割为独立块分别加密,适合教学和特定兼容场景,但存在无法隐藏数据模式的安全局限。在工程实践中,为处理非标准块长度的数据,需引入填充机制,零填充是常见方案之一。本文聚焦于**AES-128-ECB**模式与**Zero Padding**的具体实现,通过OpenSSL库在Linux C环境中逐步拆解密钥设置、数据填充、块加密循环及解密还原的全流程,并针对编译链接、内存对齐 阅读详情

相关推荐

Postman接口测试中的加解密实战:从RSA到AES的完整解决方案

在API开发与测试中,数据安全传输是核心需求,加解密技术是保障接口通信安全的基础手段。其原理是通过特定算法对数据进行编码转换,确保敏感信息在传输过程中不被窃取或篡改。从技术价值看,掌握加解密能力能显著提升测试工程师的自主性,减少对前后端开发的依赖,实现端到端的自动化测试。在实际应用场景中,金融交易、用户隐私接口等都需要对请求参数和响应数据进行加密处理。本文聚焦于Postman这一广泛使用的API测试工具,通过集成CryptoJS等脚本库,详细演示了如何在Pre-request Script和Tests Sc

weixin_29322855的博客 289

AES加密算法原理的详细介绍与实现

AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的作用与意义: 明文P 没有经过加密的数据。密钥K 用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生

qq_28205153的博客 92万+

AES(高级加密标准):AES的加解密过程分析

AES, 或称高级加密标准,是由美国国家标准与技术研究院(NIST)在2001年正式采纳的一种对称密钥加密算法。它取代了之前的DES和3DES标准,成为全球广泛使用的加密标准。AES的开发始于1997年,由比利时密码学家Joan Daemen和Vincent Rijmen设计,最初称为Rijndael算法。NIST在经过一系列的评估和测试后,选择了Rijndael作为新的加密标准,主要因为它在安全性、效率、灵活性和易于实现方面表现优异。

kkchenjj的博客 2870

AES加密解密

AES加密解密

u013021184的博客 7789

Vue使用crypto-js加密库对称加密算法

npm官网:https://www.npmjs.com/package/crypto-js 2. 按需引入 3. 加密、解密方法封装 在utils下新建crypto.js文件 4. 使用 、测试 控制台输出:

专注于技术,分享实战经验,探索技术边界,用代码构建更美的数字世界。 4678

基于AES算法的图像加解密MATLAB仿真

在图像安全中,我们可以使用加密算法对图像进行加密以保护其安全性。本文将介绍如何使用AES算法对图像进行加解密,并提供MATLAB仿真源代码。常用的AES算法有128-bit、192-bit和256-bit三种密钥长度,其中128-bit是最常用的。本文介绍了如何使用AES算法对图像进行加解密,并提供了MATLAB仿真源代码。4.将加密后的图像转化为uint8格式并保存。4.将解密后的图像转化为uint8格式并保存。1.读取加密后的图像并转化为byte格式。3.对加密后的图像进行解密。

2301_78484069的博客 836

aes iv key 微信_AES字节数组加密解密流程

AES类时微软MSDN中最常用的加密类,微软官网也有例子,参考链接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.aes?view=netframework-4.8但是这个例子并不好用,限制太多,通用性差,实际使用中,我遇到的更多情况需要是这样:1、输入一个字节数组,经AES加密后,直接输出加密后的...

weixin_39945792的博客 400

MFC桌面工具集成AES加解密:从算法封装到界面联调实战

AES作为对称加密算法的行业标准,以高强度和良好的硬件兼容性广泛应用于数据保护场景。其核心原理基于字节代换、行移位、列混合与轮密钥加的多轮变换,实际工程中还需结合CBC、CTR等分组模式以及PKCS7填充规则,才能处理任意长度的数据。在Windows桌面开发领域,MFC仍是许多传统项目和内部工具的首选框架,如何在MFC界面中高效集成AES能力,是不少开发者面临的现实问题。无论是字符串加密、二进制文件保护,还是跨平台数据交换,掌握AES的标准流程、密钥扩展策略、IV管理方式以及字符编码转换,都能显著提升工具的

weixin_33646989的博客 86

Java中AES加解密的工具类

import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import java.security.SecureRandom; /** * AES加解密 * * @Author:zkx * @date:2019年6月21日 上午9:01:41 */ class AESUtils { /** * 默认秘钥 */ p

JavaWebEngineer的博客 455

竞赛无人机模块化开发实战:2023 TI电赛G题空地协同消防系统(飞控与视觉融合篇)

本文以2023年TI电赛G题为例,详细阐述了采用模块化开发思维构建空地协同智能消防系统的实战方法。文章重点拆解了无人机飞控二次开发、视觉识别与融合控制等核心模块,提供了硬件选型、代码实现与系统联调的完整指南,旨在帮助参赛者通过“搭积木”式编程高效完成复杂系统集成。

js777的博客 454

NLP实战:如何用CoNLL-2003数据集快速提升命名实体识别模型性能(附完整代码)

本文详细介绍了如何利用CoNLL-2003公开数据集,通过深度剖析数据特点、构建鲁棒的数据预处理流水线、选择合适的模型架构(如BERT-CRF)以及优化训练策略,来系统性地提升命名实体识别(NER)模型的性能。文章提供了完整的代码示例,并分享了处理数据不均衡、标签对齐等核心挑战的实战技巧,帮助读者从理论到实践全面掌握NER任务。

cola5的博客 494

AES加解密工具

import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.SecureRandom; public class AESUtils { /** * 16 进.

kuzer汇墨 599

百度文心大模型ERNIE全面解析

文章摘要:本文汇总了多个Python自然语言处理(NLP)工具库的应用实例,涵盖百度文心大模型ERNIE、Hugging Face Transformers、StanfordNLP、SymSpell等主流框架。内容涉及文本预处理、情感分析、命名实体识别、机器翻译、文本纠错等典型NLP任务,并包含ERNIE-Lite、BART、T5等模型的调用示例。各工具库的特色功能包括:ERNIE的知识增强技术、Transformers的多任务统一接口、SymSpell的高效拼写纠正等。文章还提供了知识图谱构建、Rasa对

keny-大成的博客 2526

java aes key_java AES加解密

AES加解密工具类package com.yan.demo;import org.apache.commons.lang3.StringUtils;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpe...

weixin_34094559的博客 746

保姆级教程:用SNAP处理哨兵一号数据,5步搞定城区范围提取(附江西晋城案例)

本文提供了一份详细的保姆级教程,介绍如何使用SNAP软件处理哨兵一号数据,通过5个关键步骤快速提取城区范围。以江西晋城为例,教程涵盖数据准备、预处理、核心处理流程、自动化搭建及成果分析,帮助用户轻松掌握SNAP操作技巧,适用于城市规划、环境监测等领域。

weixin_32535389的博客 453

Halcon深度图转点云实战:从XYZ映射到3D可视化全解析

本文详细解析了如何使用Halcon将深度图转换为点云图,涵盖从XYZ映射到3D可视化的全流程。通过实战案例和代码示例,介绍了深度图预处理、xyz_to_object_model_3d核心转换及3D可视化技巧,适用于工业检测、三维重建等场景。

stem5的博客 766

AES-128-CBC加解密/openssl_decrypt

针对php的AES-128-CBC加解密代码,需要使用JAVA解密。 1. php加解密 //加密 $result = openssl_encrypt($data, "AES-128-CBC", $aesKey, 0, $aesIv); //解密 $result = openssl_decrypt($data, "AES-128-CBC", $aesKey, 0, $aesIv); 需要注意$options变量的不同。 加密过程中的$options=1, 意味着使用OPENSSL_RAW_

mollygogo的博客 4558

[STC32G144K246入门第一步]点亮LED

STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。

sinat_58149788的博客 795

AES 加解密

整理AES加解密,字节数组与十六进制字符串的相互转换。public class AES { public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException, Illeg

qq_37472682的博客 254

京东/淘宝商品评论情感分析:基于Python的大规模评论爬取与NLP情感分析实战

在当今电商蓬勃发展的时代,用户评论已成为影响消费者购买决策的关键因素。本文将详细介绍如何使用Python最新技术栈爬取京东和淘宝商品评论,并运用先进的自然语言处理技术对评论进行情感分析,识别用户的好评与差评倾向。通过完整的代码实现和深入的技术解析,帮助读者掌握从数据采集到情感分析的全流程。本文详细介绍了如何使用Python最新技术栈实现京东和淘宝商品评论的爬取与情感分析。通过结合异步爬虫、反爬策略、BERT情感分析等先进技术,我们构建了一个完整的评论分析系统。高效爬取。

2201_76125261的博客 1402

YOLOv改进 | YOLOv11更换主干Backbone之MobileNetV2(轻量化主干网络结构--高效轻量移动模型)

本文提出将YOLOv11的主干网络替换为轻量化的MobileNetV2,以提升模型在移动端设备的部署效率。MobileNetV2通过倒残差结构和线性瓶颈层,显著减少了计算量和参数量(降至1M~3M),同时保持多尺度特征提取能力。实验表明,改进后的模型在移动设备上可实现20-30 FPS的实时检测,适用于手机APP、无人机和工业监控等场景。核心代码展示了倒残差块的实现,通过深度可分离卷积和通道扩展/压缩实现高效特征提取。

走向CTO的路上... 1461

AES加解密流程解析

本文详细介绍了AES加密算法的Rijndael结构实现原理。首先阐明AES采用固定128比特分组长度,密钥可选128/192/256比特。文章重点解析了四个核心运算:字节代换(通过S盒查表)、行移位(循环左移)、列混合(矩阵乘法)和轮密钥加(异或操作),并给出了加解密流程图。特别讨论了密钥扩展过程和优化解密方案,通过两个引理证明可以复用加密结构实现高效解密。最后指出该优化方案对软硬件实现的重要意义,并提及AES指令集的相关支持。

本科网安在读 610

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于NodeJS开发钉钉回调接口 实现AES-CBC加解密

钉钉小程序后台接收钉钉开放平台的回调比较重要,比如通讯录变动的回调,审批流程的回调都是在业务上十分需要的。回调接口时打通钉钉平台和内部系统的重要渠道。 但是给回调的接口增加了一些障碍,它需要支持回调的服务器的接口支持AES-CBC加解密。不然无法成功注册或解析内容。 钉钉官方文档中给出了JAVA,PHP,C#的后台SDK和demo,但是却没有Node服务器的代码支持,这让占有率很高的node服务器非常尴尬,难道node就不能作为钉钉平台的回调服务器么 好在钉钉已经开放了其加密算法,可以通过加密流程

lvshaorong的博客 2279

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

AES前后端加解密

前端js加密,后台根据需求进行解密 加密算法规则 得到业务参数(JSON格式) 将业务参数进行加密 (规则:所有的key按照a-z的顺序进行排列然后用&进行拼接,然后md5得到字符串sign,并把里面的小写字母全部转成大写) 把生成的sign进行截取(去掉前三位和后五位)得到最终的sing 把最终的sign添加到业务请求参数中key固定为sign,value为第3步生成的...

u013239236的专栏 437

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

钉钉加解密全流程解析:AES-CBC原理、签名校验与实战避坑指南

在企业级应用对接中,AES加解密与签名校验是保障数据安全的核心技术。其原理基于对称加密算法AES-CBC模式,通过初始化向量和密钥实现数据机密性,结合SHA1签名验证请求完整性。技术价值在于确保第三方回调数据的真实性与防篡改,广泛应用于事件订阅、消息推送等场景。钉钉开放平台的加解密方案正是这一技术的典型实践,涉及43位AES Key的Base64解码、大端序消息解析及字典序签名计算。掌握这些基础机制,能有效解决回调解密失败、中文乱码等常见问题,提升对接效率与系统安全性。

weixin_33646989的博客 263

AES文件加解密工具类 AESUtils

AES文件加解密工具类 import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import java.io.*; import java.security.

yunnuo的博客 1072
上一篇: 理解AES加密解密的使用方法
下一篇: RSA加密
chentian888
博客等级 码龄11年 16粉丝 76原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值