Я новичок в C#, и мне действительно нужна помощь. Мне нужно, чтобы зашифровать/расшифровать строку с AES-256-CBC в C#, я нашел это для шифрования строки:Как расшифровать зашифрованную строку AES-256-CBC
public static string EncryptString(string message, string KeyString, string IVString)
{
byte[] Key = ASCIIEncoding.UTF8.GetBytes(KeyString);
byte[] IV = ASCIIEncoding.UTF8.GetBytes(IVString);
string encrypted = null;
RijndaelManaged rj = new RijndaelManaged();
rj.Key = Key;
rj.IV = IV;
rj.Mode = CipherMode.CBC;
try
{
MemoryStream ms = new MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, rj.CreateEncryptor(Key, IV), CryptoStreamMode.Write))
{
using (StreamWriter sw = new StreamWriter(cs))
{
sw.Write(message);
sw.Close();
}
cs.Close();
}
byte[] encoded = ms.ToArray();
encrypted = Convert.ToBase64String(encoded);
ms.Close();
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file error occurred: {0}", e.Message);
return null;
}
catch (Exception e)
{
Console.WriteLine("An error occurred: {0}", e.Message);
}
finally
{
rj.Clear();
}
return encrypted;
}
Я попытался написать функцию расшифровывать базы на коде выше, следующий код, что Я сделал:
// Decrypt a byte array into a byte array using a key and an IV
private byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV)
{
byte[] decryptedData;
//string plaintext = null;
//MemoryStream ms = new MemoryStream(cipherData);
RijndaelManaged alg = new RijndaelManaged();
alg.KeySize = 256;
alg.BlockSize = 128;
alg.Key = Key;
alg.IV = IV;
alg.Mode = CipherMode.CBC;
alg.Padding = PaddingMode.Zeros;
//Array.Copy(Key, 0, IV, 0, IV.Length);
ICryptoTransform decryptor = alg.CreateDecryptor(alg.Key, alg.IV);
using(MemoryStream ms = new MemoryStream(cipherData))
{
using (CryptoStream csDecrypt = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
using (StreamReader sw = new StreamReader(csDecrypt))
{
sw.ReadToEnd();
sw.Close();
}
csDecrypt.Close();
decryptedData = ms.ToArray();
}
}
//byte[] decryptedData = System.Text.Encoding.Unicode.GetBytes(plaintext);
return decryptedData;
}
Но это вздор, он ничего не может расшифровать. Я действительно смущен и нуждаюсь в помощи. Спасибо за любую помощь!
P/s: Пожалуйста, не давайте мне другие подобные ответы на вопросы, я уже смотрю на них. Их функция шифрования не имеет того же выхода, что и вышеупомянутая функция шифрования, в то время как мне нужно расшифровать строку, которая ДОЛЖНА быть зашифрована указанной выше функцией. У меня есть двое друзей, которые писали дешифровку в PHP и объектно-C, которые соответствовали вышеуказанной функции шифрования, плохо, если бы они снова это сделали.
Ваше шифрование дает строку base64 в качестве вывода, но ваш расшифровка принимает байтовый массив в качестве входных данных. Как вы преобразовываете строку в массив байтов перед расшифровкой? –