【问题标题】:Missing ':' after AES encryption/decryption [closed]AES加密/解密后缺少':'[关闭]
【发布时间】: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


【解决方案1】:

找到了!额外的调试让我看到它正在从文件中读回并解密它。我稍后在代码中有一个“替换”命令来提取一些格式化数据,这些数据提取了“:”。感谢您指出我远离加密,否则我仍然会在那里寻找。 #TunnelVision 谢谢。

【讨论】:

    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2010-10-22
    • 2012-02-24
    相关资源
    最近更新 更多