当前位置: 首页 > news >正文

AES加密的基本常识和封装类

AES加密的基本常识和封装类

AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感数据的安全性。它是一种块加密算法,意味着它将明文数据分成固定大小的块,并使用相同的密钥对每个块进行独立加密。AES算法支持不同的密钥长度,包括128位、192位和256位密钥。

一、 AES加密特点

  1. 对称加密: AES是对称加密算法,同一个密钥用于加密和解密数据。发送方和接收方需要事先共享密钥。
  2. 快速高效: AES是一种高效的加密算法,适合在各种硬件和软件平台上使用。
  3. 安全性: 当使用128位、192位或256位密钥时,AES被认为是安全的,并且目前没有已知的有效攻击方法来破解有效密钥长度的AES加密。
  4. 块加密: AES对数据进行块加密,每个块的大小固定为128位(16字节)。

二、AES的应用

  1. 数据传输加密: 在网络通信和数据传输过程中,使用AES加密可以确保数据在传输过程中不被未授权的人员读取和篡改。例如,网站使用HTTPS协议来通过TLS/SSL加密传输数据,保护用户在网页上输入的敏感信息,如登录凭据、信用卡信息等。
  2. 数据库加密: 对于存储在数据库中的敏感数据,如用户密码、个人身份信息等,可以使用AES加密来增加数据的安全性。即使数据库被非法访问,由于数据已被加密,黑客也很难获得实际的敏感信息。
  3. 文件加密: 对于存储在本地计算机或云存储中的重要文件,使用AES加密可以确保只有授权的用户才能访问这些文件。
  4. 数字版权保护: 在数字内容传输和存储中,例如音频、视频和电子书等,使用AES加密可以防止未经授权的复制和传播。
  5. 身份认证: 在身份认证过程中,可以使用AES加密来保护用户的身份凭据和令牌,以防止恶意用户截获和篡改认证信息。
  6. 加密电子邮件: 对于敏感的电子邮件通信,可以使用AES加密来确保邮件内容在传输和存储过程中的安全性。
  7. 加密即时通讯: 对于即时通讯应用,如聊天应用或社交媒体,使用AES加密可以确保消息内容只有发送者和接收者能够解密和阅读。
  8. 加密移动应用: 对于移动应用中的敏感数据,如用户设置、个人信息和支付信息,使用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:标记的绘制位置,相对于半径的比例&#xf…...

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

前言&#xff1a; 前面我们讲到了很多关于数据流的AI方面的介绍&#xff0c;包括自定义组件和算力提升这块的&#xff0c;今天我们来学习一个关于kettle数据分流处理非常重要的组件Switch / Case 。当我们的数据来源于类似日志、csv文件等半结构化数据时&#xff0c;我们需要在…...

MySQL下载与安装

MySQL下载与安装 一、下载 地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 当前最新是8.0版本&#xff0c;我选择上一个最新的mysql-5.7.24-winx64.zip 二、安装 MySQL安装文件分两种 .msi和.zip &#xff0c;.msi需要安装 zip格式是自己解压&#xff0c;解压缩之后…...

c++基础2

文件操作 程序运行时产生的数据属于临时数据&#xff0c;程序一旦运行结束都会被释放 通过文件可以将数据持久化 c中对文件操作需要包含 文件类型分为两种 文本文件&#xff1a;文件以ASCII码形式存储在计算机中二进制文件&#xff1a;文件以文本的二进制存储在计算机中&a…...

虚拟机VMware,linux,centos,如何将项目部署到服务器上面

vmware 是安装虚拟机的软件&#xff0c;centos是系统&#xff0c;linux是系统内核 将本地项目上线到服务器上面&#xff0c;如何实现呢&#xff1f; 准备好服务器&#xff0c;可以选择阿里云服务器 首先需要搭建环境&#xff0c;运行的主要环境是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时间卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 ![6 基本介绍 1.MATLAB实现TCN-BiGRU时间卷积双向门控循…...

Qt使用QPixmap类和QScreen类来实现简单截图功能

在Qt中&#xff0c;可以使用QPixmap类和QScreen类来实现截图功能。 以下是一个简单的示例代码&#xff0c;演示了如何在Qt中进行截图&#xff1a; #include <QtWidgets>void captureScreen() {// 获取屏幕对象QScreen *screen QGuiApplication::primaryScreen();// 截…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...