【发布时间】:2021-11-23 11:15:28
【问题描述】:
我正在编写一个软件程序,它需要将 URL 加密并保存到文本文件中,然后再解密。我正在使用简单的 AES 加密/解密调用:
private string EncryptString(string TargetString, string EncryptionKey)
{
var b = Encoding.UTF8.GetBytes(TargetString);
var encrypted = getAes(EncryptionKey).CreateEncryptor().TransformFinalBlock(b, 0, b.Length);
return Convert.ToBase64String(encrypted);
}
private string DecryptString(string TargetString, string EncryptionKey)
{
var b = Convert.FromBase64String(TargetString);
var decrypted = getAes(EncryptionKey).CreateDecryptor().TransformFinalBlock(b, 0, b.Length);
return Encoding.UTF8.GetString(decrypted);
}
private Aes getAes(string EncryptionKey)
{
var keyBytes = new byte[16];
var skeyBytes = Encoding.UTF8.GetBytes(EncryptionKey);
Array.Copy(skeyBytes, keyBytes, Math.Min(keyBytes.Length, skeyBytes.Length));
Aes aes = Aes.Create();
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.Key = keyBytes;
aes.IV = keyBytes;
return aes;
}
一切似乎都正常,但有一个例外:我在 https://...中丢失了 ':' 字符...
这是我加密并保存的内容:
...当我重新加载和解密时,我得到:
':' 不见了。当我调试时,我看到':'进入要保存的加密方法,但是当我重新加载文本文件并解密时,':'消失了。其他一切都如我所料。
我确定这很简单,但我一生都无法弄清楚。
c# - .Net 5
谢谢。
-乔
【问题讨论】:
-
你能通过简单地加密和解密而不用base64编码字节流来缩小可能性吗?
-
显示的代码是否会导致该行为似乎非常值得怀疑。它是否可以在 LINQPad 中本地重现(在任何其他代码上下文之外)?
-
同意。 “删除”冒号会完全搞砸解密。更有可能是其他东西在解密后删除了冒号。
标签: c# encryption character aes