using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class Aes256Encryption
{
private static readonly byte[] key = System.Text.Encoding.UTF8.GetBytes("#dT,Z1}v)wd64wfr3H4:z?>@vzfRt]_:");
public static byte[] GenerateIV(string jobNo)
{
using (MD5 md5 = MD5.Create())
{
return md5.ComputeHash(Encoding.UTF8.GetBytes(jobNo));
}
}
public static string Encrypt(string plainText, byte[] iv)
{
if (string.IsNullOrEmpty(plainText)) throw new ArgumentNullException(nameof(plainText));
if (iv == null || iv.Length != 16) throw new ArgumentException("IV 长度必须为 16 字节");
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
using (StreamWriter writer = new StreamWriter(cryptoStream))
{
writer.Write(plainText);
}
}
return Convert.ToBase64String(memoryStream.ToArray());
}
}
}
public static string Decrypt(string cipherText, byte[] iv)
{
if (string.IsNullOrEmpty(cipherText)) throw new ArgumentNullException(nameof(cipherText));
if (iv == null || iv.Length != 16) throw new ArgumentException("IV 长度必须为 16 字节");
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(cipherText)))
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Read))
{
using (StreamReader reader = new StreamReader(cryptoStream))
{
return reader.ReadToEnd();
}
}
}
}
}
private static byte[] ConvertHexStringToByteArray(string hex)
{
if (hex.Length % 2 != 0) throw new ArgumentException("十六进制字符串长度必须为偶数");
byte[] bytes = new byte[hex.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
}
return bytes;
}
static void Main(string[] args)
{
string jobNo = "802332932";
string plainText = "password, AES-256 Encryption!";
byte[] iv = GenerateIV(jobNo);
Console.WriteLine("密钥 (Base64): " + Convert.ToBase64String(key));
Console.WriteLine("IV (Base64): " + Convert.ToBase64String(iv));
Console.WriteLine("原文: " + plainText);
string encrypted = Encrypt(plainText, iv);
Console.WriteLine("加密后: " + encrypted);
string decrypted = Decrypt(encrypted, iv);
Console.WriteLine("解密后: " + decrypted);
}
}