当前位置: 首页> 财经> 访谈 > 数据加密-AES数据加密及C#实现

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

时间:2025/7/18 7:44:42来源:https://blog.csdn.net/weixin_67244432/article/details/141027207 浏览次数:0次

引言

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),解密时会自动移除这些填充字节,以恢复原始明文数据。
关键字:数据加密-AES数据加密及C#实现

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: