2016-09-10 8 views
-1

У меня есть два метода, которые используют в них шифрование и дешифрование, что я делаю, это чтение данных файла зашифрованным и изменение файла с зашифрованными данными, эта операция выполняется правильно, но когда я иду на дешифрование зашифрованных данных, я не возвращаю значение не оригинальна, если я вернулся странные символы: Эти функции:Мне не удалось должным образом расшифровать зашифрованные данные в файле с помощью метода Rijndael в C#?

public void EncryptFile(string[] conexion) 
     { 

      var mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 


      var inputFile = mydocpath + @"\ProjectCONFIG.sigc"; 

      const string password = @"*PROJECT-CONFIG-FILE-ENCRYPTED-2016*"; // Your Key Here 

      var cryptFile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
      var fsEncrypt = new FileStream(inputFile, FileMode.Create); 

      var rmCrypto = new RijndaelManaged(); 

      Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes(password, 10000); 
      rmCrypto.BlockSize = 256; 

      byte[] key = pwdGen.GetBytes(rmCrypto.KeySize/8); //This will generate a 256 bits key 
      byte[] iv = pwdGen.GetBytes(rmCrypto.BlockSize/8); //This will generate a 256 bits IV 

      var cs = new CryptoStream(fsEncrypt, rmCrypto.CreateEncryptor(key, iv), CryptoStreamMode.Write); 
      StreamWriter streamWriter = new StreamWriter(cs); 
      streamWriter.WriteLine(conexion); 

      streamWriter.Close(); 
      cs.Close(); 
      fsEncrypt.Close(); 
     } 

     public string DecryptFile(string inputFile) 
     { 

      const string password = @"*PROJECT-CONFIG-FILE-ENCRYPTED-2016*"; // Your Key Here 

      var cryptFile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
      var fsEncrypt = new FileStream(inputFile, FileMode.Create); 

      var rmCrypto = new RijndaelManaged(); 

      Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes(password, 10000); 
      rmCrypto.BlockSize = 256; 

      byte[] key = pwdGen.GetBytes(rmCrypto.KeySize/8); //This will generate a 256 bits key 
      byte[] iv = pwdGen.GetBytes(rmCrypto.BlockSize/8); //This will generate a 256 bits IV 

      var cs = new CryptoStream(fsEncrypt, rmCrypto.CreateEncryptor(key, iv), CryptoStreamMode.Read); 

      StreamReader streamReader = new StreamReader(cs); 
      string conexion = streamReader.ReadLine(); 


      streamReader.Close(); 
      cs.Close(); 
      fsEncrypt.Close(); 

      return conexion; 
     } 

Любые предложения ......

+0

Вы генерируете другой ключ и iv для дешифрования. – Plutonix

+0

@Plutonix Напиши мне ответ, как и должно быть, если не слишком большой дискомфорт. –

+0

Вы используете 'rmCrypto.CreateEncryptor' во время дешифрования. Это должен был быть 'rmCrypto.CreateDecryptor'. Это вопрос опечатки и должен быть закрыт. –

ответ

0

@Artjom B. Он понял, что я сделал ошибку в функции дешифрировани, которая будет читать :

public string DecryptFile(string inputFile) 
     { 

      const string password = @"*PROJECT-CONFIG-FILE-ENCRYPTED-2016*"; // Your Key Here 

      var cryptFile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
      var fsEncrypt = new FileStream(inputFile, FileMode.Create); 

      var rmCrypto = new RijndaelManaged(); 

      Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes(password, 10000); 
      rmCrypto.BlockSize = 256; 

      byte[] key = pwdGen.GetBytes(rmCrypto.KeySize/8); //This will generate a 256 bits key 
      byte[] iv = pwdGen.GetBytes(rmCrypto.BlockSize/8); //This will generate a 256 bits IV 

// The mistake is that he was calling the CreateEncryptor function() 
       var cs = new CryptoStream(fsEncrypt, rmCrypto.CreateDecryptor(key, iv), CryptoStreamMode.Read); 

      StreamReader streamReader = new StreamReader(cs); 
      string conexion = streamReader.ReadLine(); 


      streamReader.Close(); 
      cs.Close(); 
      fsEncrypt.Close(); 

      return conexion; 
     }