2015-01-14 3 views
1

У меня есть класс безопасности, который кодирует и декодирует строку, но когда я пытаюсь декодировать - что-то не так.Расшифровка AES (rijndael)

Вот мой класс безопасности:

class Security 
{ 
    public static String encrypt(String imput, String key) 
    { 
     String cipherText; 
     var rijndael = new RijndaelManaged() 
     { 
      Key = Encoding.Unicode.GetBytes(key), 
      Mode = CipherMode.ECB, 
      BlockSize = 128, 
      Padding = PaddingMode.Zeros, 
     }; 
     ICryptoTransform encryptor = rijndael.CreateEncryptor(rijndael.Key, null); 
     using (var memoryStream = new MemoryStream()) 
     { 
      using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) 
      { 
       using (var streamWriter = new StreamWriter(cryptoStream)) 
       { 
        streamWriter.Write(imput); 
        streamWriter.Flush(); 
       } 
       cipherText = Convert.ToBase64String(memoryStream.ToArray()); 
      } 
     } 
     return cipherText; 
    } 

    public static String decrypt(String imput, String key) 
    { 
     byte[] data = Convert.FromBase64String(imput); 
     String decrypted; 

     using (RijndaelManaged rijAlg = new RijndaelManaged()) 
     { 
      rijAlg.Key = Encoding.UTF8.GetBytes(key); 
      rijAlg.Mode = CipherMode.ECB; 
      rijAlg.BlockSize = 128; 
      rijAlg.Padding = PaddingMode.Zeros; 

      ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, null); 
      using (MemoryStream msDecrypt = new MemoryStream(data)) 
      { 
       using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) 
       { 
        using (StreamReader srDecrypt = new StreamReader(csDecrypt)) 
        { 
         decrypted = srDecrypt.ReadToEnd();        
        } 
       } 
      } 
     } 
     return decrypted; 
    } 
} 

В Program.cs:

String A = Security.encrypt("text", "1234567891234567"); 
A = Security.decrypt(A, "1234567891234567"); 

Finaly это вернуть что-то вроде этого:%; \ 0 \ а f6, но мне нужна оригинальная строка. Где я ошибся?

+1

я не уверен, но это 'Encoding.Unicode.GetBytes (ключ) == Encoding.UTF8.GetBytes (ключ) '? –

+0

Вы правы. Я не заметил, что использовал разные форматы. Спасибо. – KAMAEL

ответ

3

Используйте ту же кодировку в обоих методах, либо Encoding.Unicode или Encoding.UTF8

+0

Вы правы. Я не заметил, что использовал разные форматы. Спасибо. – KAMAEL

Смежные вопросы