AES加密的基本常识和封装类
AES加密的基本常识和封装类
AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感数据的安全性。它是一种块加密算法,意味着它将明文数据分成固定大小的块,并使用相同的密钥对每个块进行独立加密。AES算法支持不同的密钥长度,包括128位、192位和256位密钥。
一、 AES加密特点
- 对称加密: AES是对称加密算法,同一个密钥用于加密和解密数据。发送方和接收方需要事先共享密钥。
- 快速高效: AES是一种高效的加密算法,适合在各种硬件和软件平台上使用。
- 安全性: 当使用128位、192位或256位密钥时,AES被认为是安全的,并且目前没有已知的有效攻击方法来破解有效密钥长度的AES加密。
- 块加密: AES对数据进行块加密,每个块的大小固定为128位(16字节)。
二、AES的应用
- 数据传输加密: 在网络通信和数据传输过程中,使用AES加密可以确保数据在传输过程中不被未授权的人员读取和篡改。例如,网站使用HTTPS协议来通过TLS/SSL加密传输数据,保护用户在网页上输入的敏感信息,如登录凭据、信用卡信息等。
- 数据库加密: 对于存储在数据库中的敏感数据,如用户密码、个人身份信息等,可以使用AES加密来增加数据的安全性。即使数据库被非法访问,由于数据已被加密,黑客也很难获得实际的敏感信息。
- 文件加密: 对于存储在本地计算机或云存储中的重要文件,使用AES加密可以确保只有授权的用户才能访问这些文件。
- 数字版权保护: 在数字内容传输和存储中,例如音频、视频和电子书等,使用AES加密可以防止未经授权的复制和传播。
- 身份认证: 在身份认证过程中,可以使用AES加密来保护用户的身份凭据和令牌,以防止恶意用户截获和篡改认证信息。
- 加密电子邮件: 对于敏感的电子邮件通信,可以使用AES加密来确保邮件内容在传输和存储过程中的安全性。
- 加密即时通讯: 对于即时通讯应用,如聊天应用或社交媒体,使用AES加密可以确保消息内容只有发送者和接收者能够解密和阅读。
- 加密移动应用: 对于移动应用中的敏感数据,如用户设置、个人信息和支付信息,使用AES加密可以提高应用的数据安全性。
总的来说,AES加密算法在需要保护数据隐私和确保数据安全性的场景中都可以发挥重要作用。然而,需要注意的是,加密只是安全性的一部分,还需要综合其他安全措施,如身份验证、授权管理和防止代码注入等来构建全面的安全方案。
三、AES随机数生成器
在AES算法中,生成安全的随机数是非常重要的,因为密钥的随机性直接影响到加密的安全性。在C#中,可以使用RNGCryptoServiceProvider
类来生成安全的随机数。这个类使用CSP (Cryptographic Service Provider) 提供的强大随机数生成器来生成高质量的随机数。
using System;
using System.Security.Cryptography;class Program
{static void Main(){// 创建一个RNGCryptoServiceProvider实例using (var rngCsp = new RNGCryptoServiceProvider()){// 定义密钥长度(以字节为单位),AES算法支持128、192和256位密钥int keySizeInBytes = 32; // 256位密钥,对应32字节// 用于存储生成的随机数的字节数组byte[] randomBytes = new byte[keySizeInBytes];// 生成随机数rngCsp.GetBytes(randomBytes);// 将随机数转换成Base64字符串,以便存储和传输string base64Key = Convert.ToBase64String(randomBytes);// 输出生成的密钥Console.WriteLine("随机生成的AES密钥:");Console.WriteLine(base64Key);}}
}
这段代码通过RNGCryptoServiceProvider
类生成一个256位(32字节)的AES密钥,并将生成的随机字节转换成Base64字符串。生成的密钥是高质量的、安全的随机数,适合在AES加密中使用。
值得注意的是,在使用生成的随机数作为AES密钥时,务必确保密钥的保密性,不要明文存储密钥或者通过不安全的方式传输密钥。一般来说,可以使用其他手段(例如非对称加密)来保护密钥的传输和存储。
四、AES加密封装类
using System;
using System.Security.Cryptography;
using System.Text;public class AesEncryptionExample
{public static byte[] Encrypt(string plainText, byte[] key, byte[] iv){byte[] encrypted;using (Aes aesAlg = Aes.Create()){aesAlg.Key = key;aesAlg.IV = iv;ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);using (MemoryStream msEncrypt = new MemoryStream()){using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)){using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)){swEncrypt.Write(plainText);}encrypted = msEncrypt.ToArray();}}}return encrypted;}public static string Decrypt(byte[] cipherText, byte[] key, byte[] iv){string plaintext = null;using (Aes aesAlg = Aes.Create()){aesAlg.Key = key;aesAlg.IV = iv;ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);using (MemoryStream msDecrypt = new MemoryStream(cipherText)){using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)){using (StreamReader srDecrypt = new StreamReader(csDecrypt)){plaintext = srDecrypt.ReadToEnd();}}}}return plaintext;}public static void Main(){string originalText = "Hello, AES!";byte[] key = new byte[32]; // 256-bit keybyte[] iv = new byte[16]; // 128-bit IV// Generate random key and IVusing (var rngCryptoServiceProvider = new RNGCryptoServiceProvider()){rngCryptoServiceProvider.GetBytes(key);rngCryptoServiceProvider.GetBytes(iv);}byte[] encryptedBytes = Encrypt(originalText, key, iv);string encryptedText = Convert.ToBase64String(encryptedBytes);Console.WriteLine($"Encrypted: {encryptedText}");string decryptedText = Decrypt(encryptedBytes, key, iv);Console.WriteLine($"Decrypted: {decryptedText}");}
}
在这个示例中,我们使用AES算法来加密和解密数据。需要注意的是,加密和解密的过程需要使用相同的密钥和初始化向量(IV)。在示例中,我们使用了256位的密钥和128位的IV,可以根据需要更改这些值。同时,为了保证密钥和IV的安全性,通常需要使用安全的随机数生成器来生成它们。
相关文章:
AES加密的基本常识和封装类
AES加密的基本常识和封装类 AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感数据的安全性。它是一种块加密算法,意味着它将明文数据分成固定大小的块,并使用相同的密钥对每个块进行独立…...

elasticsearch使用记录
参考文章:https://elasticsearch-py.readthedocs.io/en/v8.8.2/ 参考文章:https://cuiqingcai.com/6214.html 参考文章:https://www.cnblogs.com/cupleo/p/13953890.html elasticsearch版本:8.8.2(软件包发行版) python版本&#…...
UNI-APP_横屏切换竖屏出现样式混乱问题
app从竖屏页面1进入竖屏页面2,再进入横屏,再返回,再返回从新回到竖屏页面1,再次进入竖屏页面2,发现竖屏页面2的所有图片字体都被放大了。再返回竖屏1,再进入竖屏2,一切又恢复正常。 解决跳转横…...

数据可视化(3)
1.饼状图 #饼状图 #pie(x,labels,colors,labeldistance,autopct,startangle,radius,center,textprops) #x,每一块饼状图的比例 #labels:每一块饼形图外侧显示的文字说明 #labeldistance:标记的绘制位置,相对于半径的比例…...
AI面试官:MD5、DES、RSA、AES加密
AI面试官:MD5、DES、RSA、AES加密 文章目录 AI面试官:MD5、DES、RSA、AES加密1. 什么是MD5加密?它在实际应用中有哪些场景?2. DES加密是什么?它在现实中的应用场景有哪些?3. 问题:RSA加密是什么…...
Shell脚本学习-$$特殊变量
$$特殊变量: 获取脚本执行的进程号(PID)。 [rootvm1 scripts]# cat test_pid.sh echo $$ > /tmp/a.pid sleep 300代码说明: 1)获取$$值,也就是当前脚本进程的PID值,重定向到/tmp/a.pid文件…...
vscode中python插件过新导致无法正常debug问题解决安装vscode以前版本python插件教程
您需要从.vsix文件安装它。您可以在此处找到它们。 下载所需.vsix版本的文件。您可能需要单击assets才能看到它们。 然后打开 VSCode,转到extensions-> 单击三个点 ->install from vsix并选择您的文件。 重启以后,就可以正常debug了!...

chrome macos编译
下载工具包 git clone https://chromium.googlesource.com/chromium/tools/depot_tools/gitpwd export PATH"$PATH:/Users/lichengjun/Downloads/chrome_build/depot_tools" mkdir chromium cd chromium 如果想快的话直接: fetch --nohooks --no-history chromium (…...

Linux环境下Elasticsearch相关软件安装
Linux环境下Elasticsearch相关软件安装 本文将介绍在linux(Centos7)环境下安装Elasticsearch相关的软件。 1、安装Elasticsearch 1.1 Elasticsearch下载 首先去Elasticsearch官网下载相应版本的安装包,下载之后传输到linux服务器上。 官网地址:http…...

【趟坑记录】d3.zoom()的正确使用姿势 @d3.v7
【趟坑记录】d3.zoom()的正确使用姿势 d3.v7 文章目录 【趟坑记录】d3.zoom()的正确使用姿势 d3.v7问题重现原因分析解决方案放缩平移写法特殊修改transform函数的写法 总结 在开发一个D3应用的时候遇到了一个 zoom相关的问题,记录解决思路与方案 问题重现 最近在…...

基于 Docker + Nginx + Gitlab-runner 实现前端自动化部署流程
本篇会用到Docker,Gitlab-runner等相关工具,如果对其不是特别了解,可以参考下相关文档: GitLab RunnerDocker 快速入门CI/CD:持续集成/持续部署 在早期部署前端项目时,我们通常会通过ftp把前端代码直接传…...

make/makefile的使用
make/makefile 文章目录 make/makefile初步认识makefile的工作流程依赖关系和依赖方法make的使用 总结 make是一个命令,是一个解释makefile中指令的命令工具,makefile是一个文件,当前目录下的文件,两者搭配使用,完成项…...
Flutter中Navigator 跳转传参数和反向传参数
初始化路由 MaterialApp(routes: <String, WidgetBuilder>{"/Second": (BuildContext context){return Second("");}}, 跳转传参数 String va await Navigator.of(context).push(MaterialPageRoute(builder: (content) {return Second( demo); },…...

kettle开发-Day40-AI分流之case/switch
前言: 前面我们讲到了很多关于数据流的AI方面的介绍,包括自定义组件和算力提升这块的,今天我们来学习一个关于kettle数据分流处理非常重要的组件Switch / Case 。当我们的数据来源于类似日志、csv文件等半结构化数据时,我们需要在…...
MySQL下载与安装
MySQL下载与安装 一、下载 地址:https://dev.mysql.com/downloads/mysql/ 当前最新是8.0版本,我选择上一个最新的mysql-5.7.24-winx64.zip 二、安装 MySQL安装文件分两种 .msi和.zip ,.msi需要安装 zip格式是自己解压,解压缩之后…...
c++基础2
文件操作 程序运行时产生的数据属于临时数据,程序一旦运行结束都会被释放 通过文件可以将数据持久化 c中对文件操作需要包含 文件类型分为两种 文本文件:文件以ASCII码形式存储在计算机中二进制文件:文件以文本的二进制存储在计算机中&a…...
虚拟机VMware,linux,centos,如何将项目部署到服务器上面
vmware 是安装虚拟机的软件,centos是系统,linux是系统内核 将本地项目上线到服务器上面,如何实现呢? 准备好服务器,可以选择阿里云服务器 首先需要搭建环境,运行的主要环境是jdktomcatmysql; 通过远程连接…...
R语言 BPNN 反向传播神经网络
##BPNN-neuronet set.seed(123) folds <- createFolds(y=data$Groups,k=10) 建一个放auc值的空向量 auc<-as.numeric() Errorrate<-as.numeric() accuracy<-as.numeric() sensitivity<-as.numeric() specificity<-as.numeric() roc <- vector("li…...

回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测
回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...