c# AES/CBC/PKCS5Padding (BlockSize)=128 代码
时间: 2024-01-03 19:03:15 浏览: 27
以下是C#中使用AES/CBC/PKCS5Padding(BlockSize=128)进行加密和解密的示例代码:
```csharp
using System;
using System.Security.Cryptography;
using System.Text;
public class AesEncryptionHelper
{
private const int KeySize = 128; // 设置密钥长度为128位
private const int IvSize = 16; // 设置向量长度为16位
public static string Encrypt(string strToEncrypt, string key, string iv)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes(iv);
byte[] inputBytes = Encoding.UTF8.GetBytes(strToEncrypt);
using (Aes aes = Aes.Create())
{
aes.KeySize = KeySize;
aes.BlockSize = KeySize;
aes.Key = keyBytes;
aes.IV = ivBytes;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
using (ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
using (var ms = new System.IO.MemoryStream())
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(inputBytes, 0, inputBytes.Length);
cs.FlushFinalBlock();
var encryptedBytes = ms.ToArray();
return Convert.ToBase64String(encryptedBytes);
}
}
}
public static string Decrypt(string strToDecrypt, string key, string iv)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes(iv);
byte[] inputBytes = Convert.FromBase64String(strToDecrypt);
using (Aes aes = Aes.Create())
{
aes.KeySize = KeySize;
aes.BlockSize = KeySize;
aes.Key = keyBytes;
aes.IV = ivBytes;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
using (ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV))
using (var ms = new System.IO.MemoryStream(inputBytes))
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
byte[] decryptedBytes = new byte[inputBytes.Length];
int decryptedByteCount = cs.Read(decryptedBytes, 0, decryptedBytes.Length);
return Encoding.UTF8.GetString(decryptedBytes, 0, decryptedByteCount);
}
}
}
}
```
使用示例:
```csharp
string key = "0123456789abcdef"; // 密钥为16位
string iv = "0123456789abcdef"; // 向量为16位
string plaintext = "Hello World!";
string encrypted = AesEncryptionHelper.Encrypt(plaintext, key, iv);
Console.WriteLine("Encrypted: " + encrypted);
string decrypted = AesEncryptionHelper.Decrypt(encrypted, key, iv);
Console.WriteLine("Decrypted: " + decrypted);
```
输出结果:
```
Encrypted: h8IRib8wKbe2Q1/xH6uUaQ==
Decrypted: Hello World!
```