2011-10-04 3 views
1

Je crypte puis décrypte une chaîne à l'aide d'AES. Mais ma sortie ressemble à ceci:Les caractères de chiffrement/déchiffrement des chaînes AES sont espacés

Original text >> HI WORLD 
Decrypted text >> H I W O R L D 

J'ai essayé beaucoup de code mais je n'ai pas trouvé le problème.

Où est le problème ici?

class Program 
{ 
    public static void Main(string[] args) 
    { 
     byte[] aesKey = Cryptography.GenerateAes128Key(); 
     Console.WriteLine("AES key >> " + aesKey.Length); 
     string originalText = "HI WORLD"; 
     byte[] myMess = ASCIIEncoding.Unicode.GetBytes(originalText); 
     Console.WriteLine("Original text >> " + ASCIIEncoding.Unicode.GetString(myMess)); 
     byte[] myEcnryptedMess = Cryptography.Encrypt(myMess, aesKey); 
     Console.WriteLine("Encrypted text >> " + ASCIIEncoding.Unicode.GetString(myEcnryptedMess)); 
     Console.WriteLine("Decrypted text >> " + Cryptography.Decrypt(myEcnryptedMess, aesKey)); 
     Console.WriteLine("Press any key to continue . . . "); 
     Console.ReadKey(true); 
    } 

    public static byte[] Encrypt(byte[] plainTextBytes, byte[] Key) 
    { 
     byte[] iv = new byte[Key.Length]; 
     Aes myAes = Aes.Create(); 
     ICryptoTransform encryptor = myAes.CreateEncryptor(Key, iv); 
     MemoryStream memoryStream = new MemoryStream(); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write); 
     cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); 
     cryptoStream.FlushFinalBlock(); 
     byte[] cipherTextBytes = memoryStream.ToArray(); 
     // Close both streams. 
     memoryStream.Close(); 
     cryptoStream.Close(); 
     return cipherTextBytes; 
    } 

    public static string Decrypt(byte[] cipherTextBytes, byte[] Key) 
    { 
     byte[] iv = new byte[Key.Length]; 
     Aes myAes = Aes.Create(); 
     ICryptoTransform decryptor = myAes.CreateDecryptor(Key, iv); 
     MemoryStream memoryStream = new MemoryStream(cipherTextBytes); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); 
     byte[] plainTextBytes = new byte[cipherTextBytes.Length]; 
     // Start decrypting. 
     int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); 
     // Close both streams. 
     memoryStream.Close(); 
     cryptoStream.Close(); 
     // Convert decrypted data into a string. 
     // Let us assume that the original plaintext string was UTF8-encoded. 
     string plainText = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); 
     // Return decrypted string. 
     return plainText; 
    } 
} 
+0

Faites-le vous-même? –

+0

Vous ne devriez pas simplement supprimer les questions correctement posées simplement parce que vous avez déjà résolu vous-même le problème. Vous êtes ici non seulement pour obtenir de l'aide, c'est supposé être une source d'information même pour les autres qui viennent ici avec le même problème (ou similaire). – Mormegil

Répondre

3

Vous utilisez un codage différent à GetBytes et GetString:

ASCIIEncoding.Unicode.GetBytes(originalText); 

puis

Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount) 

Essayez d'utiliser même pour les deux opérations.

Kris

1

Vous faites un bazar avec vos encodages de chaînes. ASCIIEncoding.Unicode est, fondamentalement, un non-sens. (En fait, il est exactement le même que Encoding.Unicode, mais écrit de manière trompeuse.)

Quel encodage voulez-vous utiliser? UTF-16, UTF-8 ou ASCII? Selon le choix, utilisez Encoding.Unicode, Encoding.UTF8 ou et respectez-le. Je suppose que UTF-8 est le meilleur choix, par conséquent, utilisez ceci:

// ... 
string originalText = "HI WORLD"; 
byte[] myMess = Encoding.UTF8.GetBytes(originalText); 
Console.WriteLine("Original text >> " + Encoding.UTF8.GetString(myMess)); 
byte[] myEcnryptedMess = Cryptography.Encrypt(myMess, aesKey); 
Console.WriteLine("Encrypted text >> " + Encoding.UTF8.GetString(myEcnryptedMess)); 
Console.WriteLine("Decrypted text >> " + Cryptography.Decrypt(myEcnryptedMess, aesKey)); 
Questions connexes