Comment décrypter une AES-256-CBC chaîne cryptée
Je suis nouveau en C# et j'ai vraiment besoin d'aide. J'ai besoin de crypter/décrypter une chaîne avec AES-256-CBC en C#, j'ai trouvé ceci pour crypter une chaîne de caractères:
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;
}
J'ai essayé d'écrire un déchiffrer la fonction de base sur le code ci-dessus, le code suivant est ce que j'ai fait:
//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;
}
Mais c'est absurde, il ne peut pas déchiffrer quoi que ce soit. Je suis vraiment confus et ont besoin d'aide. Merci pour toute aide!
P/s: Merci de ne pas me donner d'autres similaires ont répondu à des questions, j'ai déjà jeter un oeil à eux. Leur fonction de crypter n'ont pas la même sortie, tout comme pour la fonction encrypt, alors que j'ai besoin de décrypter la chaîne qui DOIT être chiffrer par la fonction ci-dessus. J'ai deux ami qui a écrit décrypter la fonction en PHP et objective-C, qui correspondait avec la fonction encrypt, c'est mauvais pour les avoir à le faire à nouveau.
OriginalL'auteur Mee | 2013-11-30
Vous devez vous connecter pour publier un commentaire.
Regardant votre cryptage, quelque chose comme cela devrait le faire, en passant, la chaîne résultante à partir de votre chiffrement doit remettre l'original de la chaîne de retour;
Une petite remarque; vous obtenez la clé à l'aide de l'encodage UTF8 de la chaîne de clé, le codage UTF8 peut vous donner plusieurs octets de retour pour les caractères internationaux, ce qui peut donner une touche ou IV de la bonne longueur pour le chiffrement/déchiffrement. Aussi, à l'aide de la petite gamme de mots de passe/avec les touches de 8 caractères et les caractères imprimables ne vous donnera pas très sécurisé de cryptage, vous pouvez exécuter la chaîne si SHA1 ou similaire avant de l'utiliser comme une clé (qui sera malheureusement le rendre incompatible avec le cryptage)
OriginalL'auteur Joachim Isaksson