欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > C# AES

C# AES

2025/4/19 14:37:16 来源:https://blog.csdn.net/lljss1980/article/details/144272004  浏览:    关键词:C# AES
1.带初始化向量
public class AesEncryption
{private readonly byte[] aesKey = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };private readonly string key = "0123456789abcdef"; // 必须是16, 24, 或 32 个字符private readonly string iv = "0000000000000000";  // 必须是16个字符public string Encrypt(string plainText){using (Aes aesAlg = Aes.Create()){//aesAlg.Key = aesKey;aesAlg.Key = Encoding.UTF8.GetBytes(key);aesAlg.IV = Encoding.UTF8.GetBytes(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);}byte[] encrypted = msEncrypt.ToArray();return Convert.ToBase64String(encrypted);}}}public string Decrypt(string cipherText){using (Aes aesAlg = Aes.Create()){aesAlg.Key = Encoding.UTF8.GetBytes(key);aesAlg.IV = Encoding.UTF8.GetBytes(iv);ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText)))using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))using (StreamReader srDecrypt = new StreamReader(csDecrypt)){return srDecrypt.ReadToEnd();}}}
}
private void test_aes()
{string original = "This is the data to be encrypted.";//using (AesEncryption aes = new AesEncryption())AesEncryption aes = new AesEncryption();{string encrypted = aes.Encrypt(original);Console.WriteLine($"Encrypted:   {encrypted}");string decrypted = aes.Decrypt(encrypted);Console.WriteLine($"Decrypted:   {decrypted}");}
}
2.不带初始化向量, ECB, 128bit, base64
public class AESNoIVExample
{public byte[] GenerateRandomSalt(){byte[] salt = new byte[16];using (var rng = new RNGCryptoServiceProvider()){rng.GetBytes(salt);}// 注意:在实际应用中,你应该存储并重用这个盐值,而不是每次都生成一个新的。// 但在这个例子中,为了简化,我们每次都生成一个新的盐值。// 这意味着每次运行程序时,即使密码相同,生成的密钥也会不同。// 这只是为了演示目的,不应该在实际加密场景中使用。return salt;}public byte[] Encrypt(string plainText, byte[] Key){if (plainText == null || plainText.Length <= 0)throw new ArgumentNullException(nameof(plainText));if (Key == null || Key.Length <= 0)throw new ArgumentNullException(nameof(Key));byte[] encrypted;using (Aes aesAlg = Aes.Create()){aesAlg.Key = Key;// 不设置IV(不推荐)// aesAlg.IV = ...; // 不使用IVaesAlg.Mode = CipherMode.ECB; // 使用ECB模式(不推荐,因为它不安全)aesAlg.Padding = PaddingMode.PKCS7;ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, null); // 传入null作为IVusing (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 string Decrypt(byte[] cipherText, byte[] Key){if (cipherText == null || cipherText.Length <= 0)throw new ArgumentNullException(nameof(cipherText));if (Key == null || Key.Length <= 0)throw new ArgumentNullException(nameof(Key));string plaintext = null;using (Aes aesAlg = Aes.Create()){aesAlg.Key = Key;// 不设置IV(不推荐)// aesAlg.IV = ...; // 不使用IVaesAlg.Mode = CipherMode.ECB; // 使用ECB模式(不推荐,因为它不安全)aesAlg.Padding = PaddingMode.PKCS7;ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, null); // 传入null作为IVusing (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;}}
private void test_aes()
{//2. AES NoIVstring plaintext = "This is the data to be encrypted.";string password = "0123456789abcdef"; // 用于生成密钥的密码AESNoIVExample ase2 = new AESNoIVExample();// 生成密钥byte[] key = Encoding.UTF8.GetBytes(password);// 加密byte[] encrypted2 = ase2.Encrypt(plaintext, key);string base64Encrypted = Convert.ToBase64String(encrypted2);Console.WriteLine("Encrypted (Base64): " + base64Encrypted);// 解密byte[] decryptedBytes = Convert.FromBase64String(base64Encrypted);string decrypted2 = ase2.Decrypt(decryptedBytes, key);Console.WriteLine("Decrypted: " + decrypted2);
}

版权声明:

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

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

热搜词