我目前面临的问题是,当从我的解密方法返回解密数据时,原始数据的文本末尾有随机数字和字母。我正在使用 AES 加密,这是我第一次使用它,所以如果我遗漏了一些明显的东西或者做了一些不好的做法,请好好指出。
我的加密方式是-
public static byte[] Encrypt(int key, string plainText, int iv)
{
byte[] encryptedText;
Aes aesAlg = Aes.Create();
string keyString = key.ToString();
Rfc2898DeriveBytes sourceDeriveBytes = new(keyString, Encoding.UTF8.GetBytes(keyString));
byte[] keyBytes = sourceDeriveBytes.GetBytes(16);
aesAlg.Key = keyBytes;
string ivString = iv.ToString();
Rfc2898DeriveBytes zendeskDeriveBytes = new(ivString, Encoding.UTF8.GetBytes(ivString));
byte[] ivBytes = zendeskDeriveBytes.GetBytes(16);
aesAlg.IV = ivBytes;
aesAlg.Padding = PaddingMode.None;
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);
}
}
encryptedText = msEncrypt.ToArray();
}
return encryptedText;
}
我的解密方法是-
public static string Decrypt(int key, byte[] encryptedText, int iv)
{
string plainText;
Aes aesAlg = Aes.Create();
string keyString = key.ToString();
Rfc2898DeriveBytes pbkdf = new(keyString, Encoding.UTF8.GetBytes(keyString));
byte[] keyBytes = pbkdf.GetBytes(16);
aesAlg.Key = keyBytes;
string ivString = iv.ToString();
Rfc2898DeriveBytes zendeskDeriveBytes = new(ivString, Encoding.UTF8.GetBytes(ivString));
byte[] ivBytes = zendeskDeriveBytes.GetBytes(16);
aesAlg.IV = ivBytes;
aesAlg.Padding = PaddingMode.None;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(encryptedText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
plainText = srDecrypt.ReadToEnd();
}
}
}
return plainText;
}
返回的解密文本的示例是
TESTa��6�F�~4�?�0�3�p��]��]�*�R���p��]��]�*�R��
。我需要在代码中更改哪些内容才能删除数据末尾的额外字符?