解密 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();
}
我试图根据用户输入的硬编码密钥解密一个简单的 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();
}