解密 AES 字符串未按预期工作

Decrypting AES string not working as expected

我试图根据用户输入的硬编码密钥解密一个简单的 AES 字符串 BqvGk+lyQ+pyhSqwV3MfRg==(翻译为 Hello World),但出现错误。当它试图从终端读取 base64 字符串时,这可能是个问题吗?不确定如何解决。

   at EncryptionDecryptionUsingSymmetricKey.AesOperation.DecryptString(String key) in \visualstudio\AES_Decryptor\AES_Decryptor\Program.cs:line 32
   at EncryptionDecryptionUsingSymmetricKey.AesOperation.Main(String[] args) in \visualstudio\AES_Decryptor\AES_Decryptor\Program.cs:line 21
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace EncryptionDecryptionUsingSymmetricKey
{
    public class AesOperation
    {
        static void Main(string[] args)
        {
            var key = "b14ca5898a4e4133bbce2ea2315a1916";

            Console.WriteLine("[+] Decrypt: ");
            var str = Console.ReadLine();
           
            var decryptedString = AesOperation.DecryptString(key);
            Console.WriteLine($"[+] Original payload: {decryptedString}");

        }

        private static object DecryptString(string key)
        {
            throw new NotImplementedException();
        }

        public static string DecryptString(string key, string cipherText)
        {
            byte[] iv = new byte[16];
            byte[] buffer = Convert.FromBase64String(cipherText);

            using (Aes aes = Aes.Create())
            {
                aes.Key = Encoding.UTF8.GetBytes(key);
                aes.IV = iv;
                ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

                using (MemoryStream memoryStream = new MemoryStream(buffer))
                {
                    using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader streamReader = new StreamReader((Stream)cryptoStream))
                        {
                            return streamReader.ReadToEnd();
                        }
                    }
                }
            }
        }
    }
}

此方法有效。当我 运行:

    void Main()
    {
        var key = "b14ca5898a4e4133bbce2ea2315a1916";

        var decryptedString = DecryptString(key, "BqvGk+lyQ+pyhSqwV3MfRg==");
        Console.WriteLine($"[+] Original payload: {decryptedString}");
    }

结果是:

[+] Original payload: Hello World!

我也在用你自己的方法:

public static string DecryptString(string key, string cipherText)
{
    byte[] iv = new byte[16];
    byte[] buffer = Convert.FromBase64String(cipherText);

    using (Aes aes = Aes.Create())
    {
        aes.Key = Encoding.UTF8.GetBytes(key);
        aes.IV = iv;
        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

        using (MemoryStream memoryStream = new MemoryStream(buffer))
        {
            using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader streamReader = new StreamReader((Stream)cryptoStream))
                {
                    return streamReader.ReadToEnd();
                }
            }
        }
    }
}

所以我认为您需要提供更多错误消息(如果有),或者我们需要更多代码。因为您的密钥可以使用您自己提供的方法很好地解密 AES 字符串。

如果我不得不猜测问题是 2 件事中的 1 件事。

var str = Console.ReadLine();

我没看到你在任何地方引用 str。它还将读取整个控制台行,这可能给你的不仅仅是 aes 字符串。你也可能只是调用你的抛出异常方法。我不确定为什么会这样。也许尝试摆脱那个和 运行ning 代码。我指的是这个方法。

private static object DecryptString(string key)
    {
        throw new NotImplementedException();
    }