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

数据加密-AES数据加密及C#实现

引言

AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准与技术研究院(NIST)于2001年发布。AES以其高效、安全的特点,在数据加密领域占据了重要地位。

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){// 硬编码的密钥和IV(仅为示例,请勿在生产环境中使用)  byte[] key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");byte[] iv = Encoding.UTF8.GetBytes("1234567890123456");// 输入的15位数字  string input = "123456789012345";// 加密  string encryptedText = Encrypt(input, key, iv);Console.WriteLine($"Encrypted: {encryptedText}");//string encryptedText = "iQNJPVM+M+DzzMQH5l9pmQ==";// 解密(可选,以验证加密是否正确)  string decryptedText = Decrypt(encryptedText, key, iv);Console.WriteLine($"Decrypted: {decryptedText}");}static string 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 Convert.ToBase64String(encrypted);}static string Decrypt(string cipherText, byte[] Key, byte[] IV){cipherText = cipherText.Replace(" ", "+"); // 处理Base64中的空格问题  byte[] cipherBytes = Convert.FromBase64String(cipherText);using (Aes aesAlg = Aes.Create()){aesAlg.Key = Key;aesAlg.IV = IV;ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);using (MemoryStream msDecrypt = new MemoryStream(cipherBytes)){using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)){using (StreamReader srDecrypt = new StreamReader(csDecrypt)){return srDecrypt.ReadToEnd();}}}}}
}

WPF小程序加密转换

http://t.csdnimg.cn/nlWlg

该程序加密和解密的原理主要基于AES(Advanced Encryption Standard)加密算法,这是一种广泛使用的对称密钥加密算法。在AES中,加密和解密使用相同的密钥,但过程在逻辑上是相反的。下面是该程序加密和解密的具体原理:

加密原理

  1. 密钥和初始化向量(IV)
    • 密钥(Key)是用于加密和解密数据的秘密值。
    • 初始化向量(IV)是一个随机或伪随机的值,用于增加加密的随机性,使得即使相同的明文块在多次加密时也会产生不同的密文块。
    • 在这个程序中,密钥和IV被硬编码为字符串,然后转换为字节数组。然而,在实际应用中,密钥和IV应该安全地生成和存储。
  2. AES算法
    • AES算法将明文数据分成固定大小的块(AES的块大小是128位或16字节)。
    • 对于每个块,AES算法使用密钥和可能的IV(在CBC、CFB等模式下)来生成一个密文块。
    • 如果明文长度不是块大小的整数倍,则需要进行填充(如PKCS#7填充),以确保最后一个块的大小正确。
  3. 加密过程
    • 创建一个Aes对象,并设置其密钥和IV。
    • 使用CreateEncryptor方法创建一个加密器对象。
    • 将明文数据写入一个MemoryStream中,然后将该流包装在一个CryptoStream中,该CryptoStream使用加密器进行加密。
    • 将加密后的数据从MemoryStream中读取出来,并转换为字节数组。
    • 最后,将字节数组转换为Base64字符串以便于存储或传输。

解密原理

解密是加密的逆过程:

  1. 读取密文
    • 首先,将Base64编码的密文字符串转换回字节数组。
  2. AES算法
    • 同样,创建一个Aes对象,并设置与加密时相同的密钥和IV。
    • 使用CreateDecryptor方法创建一个解密器对象。
  3. 解密过程
    • 将密文字节数组包装在一个MemoryStream中,然后将该流包装在一个CryptoStream中,该CryptoStream使用解密器进行解密。
    • CryptoStream中读取解密后的数据,并将其转换回明文。
  4. 处理填充
    • 如果加密时使用了填充(如PKCS#7),解密时会自动移除这些填充字节,以恢复原始明文数据。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 为什么在网页编辑文字时键盘输入换行要停顿一下网页才显示
  • MaxKB:基于 LLM大语言模型的知识库问答系统实操
  • 部署服务器项目及发布
  • Spring统一处理请求响应与异常
  • QT 布局管理器之QHBoxLayout
  • C语言(16)指针(iv)
  • 当科幻照进现实:Figure 02机器人震撼发布!
  • 2024网络安全必会的基础知识
  • 【Linux】系列入门摘抄笔记-5-管理、创建、移动文件目录及文件搜索命令
  • 详解高性能中间件Iceoryx在ROS2中的使用
  • 【大模型从入门到精通13】openAI API 构建和评估大型语言模型(LLM)应用1
  • Chapter 30 多态
  • 解密 Coretime:Polkadot 区块链资源分配的新革命
  • LVS实验的三模式总结
  • “绿色积分引领新风尚:‘我店‘平台重塑消费市场格局“
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • css的样式优先级
  • JWT究竟是什么呢?
  • oldjun 检测网站的经验
  • 基于 Babel 的 npm 包最小化设置
  • 讲清楚之javascript作用域
  • 排序算法之--选择排序
  • 驱动程序原理
  • 深度学习入门:10门免费线上课程推荐
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​Linux·i2c驱动架构​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # .NET Framework中使用命名管道进行进程间通信
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #git 撤消对文件的更改
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (6)设计一个TimeMap
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (第27天)Oracle 数据泵转换分区表
  • (独孤九剑)--文件系统
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)Linux+Windows下安装ffmpeg
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)scrum常见工具列表
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .bat批处理(一):@echo off
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例