通过以下示例代码,您可以使用AesManaged类从.txt文件中读取加密数据,并解决填充无效且无法移除的问题。
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class AesManagedExample
{
public static void Main()
{
string inputFile = "input.txt";
string outputFile = "output.txt";
string password = "MyPassword123"; // 密码长度必须是16、24或32字节
try
{
// 读取输入文件的内容
byte[] encryptedData = File.ReadAllBytes(inputFile);
// 创建AES加密算法的实例
using (AesManaged aes = new AesManaged())
{
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
// 从密码生成密钥和初始化向量
byte[] key = new byte[aes.KeySize / 8];
byte[] iv = new byte[aes.BlockSize / 8];
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
Buffer.BlockCopy(passwordBytes, 0, key, 0, Math.Min(key.Length, passwordBytes.Length));
Buffer.BlockCopy(passwordBytes, 0, iv, 0, Math.Min(iv.Length, passwordBytes.Length));
// 解密数据
using (ICryptoTransform decryptor = aes.CreateDecryptor(key, iv))
{
byte[] decryptedData = decryptor.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
// 将解密后的数据写入输出文件
File.WriteAllBytes(outputFile, decryptedData);
}
}
Console.WriteLine("解密成功!");
}
catch (CryptographicException e)
{
Console.WriteLine("解密失败:填充无效或无法移除。");
Console.WriteLine(e.Message);
}
catch (Exception e)
{
Console.WriteLine("解密失败:" + e.Message);
}
}
}
请注意,此示例假定输入文件是以字节形式存储的加密数据。解密后的数据将作为字节写入输出文件。您可以根据需要进行调整来适应您的具体情况。另外,请确保您提供的密码长度为16、24或32字节,以与AES密钥长度匹配。
上一篇:AES轮密钥生成
下一篇:AES明文必须是128比特吗?