0

https://msdn.microsoft.com/en-us/library/system.security.cryptography.aes(v=vs.110).aspxAES шифрование без использования IV

Я планирую использовать AES для шифрования/дешифрования моих сообщений. Я не хочу использовать IV во время шифрования/дешифрования, потому что я уже защищаю свой ключ в KeyVault, и я просто хочу поделиться только одним ключом с другими сторонами, которые могут расшифровать мои сообщения.

Любые предложения? Как я могу сделать IV как необязательный/удаленный.

+0

Вы даже понимаете цель IV здесь в первую очередь? –

+0

Возможный дубликат [совместного использования и хранения IV для шифрования/дешифрования AES] (http://stackoverflow.com/questions/13819231/sharing-storing-iv-for-aes-encryption-decryption) –

+0

Да, я это понимаю. Но я не хочу использовать .. –

ответ

0

Когда шифрованной, сгенерировать IV и предварительно PEND его к шифрованный текст
Шифрование:

private string EncryptString(string plainText, byte[] Key) 
     { 
      if (plainText == null || plainText.Length <= 0) 
       throw new ArgumentNullException("plainText"); 
      if (Key == null || Key.Length <= 0) 
       throw new ArgumentNullException("Key"); 

      using (Aes _aesAlg = Aes.Create()) 
      { 
       _aesAlg.Key = Key; 
       ICryptoTransform _encryptor = _aesAlg.CreateEncryptor(_aesAlg.Key, _aesAlg.IV); 

       using (MemoryStream _memoryStream = new MemoryStream()) 
       { 
        _memoryStream.Write(_aesAlg.IV, 0, 16); 
        using (CryptoStream _cryptoStream = new CryptoStream(_memoryStream, _encryptor, CryptoStreamMode.Write)) 
        { 
         using (StreamWriter _streamWriter = new StreamWriter(_cryptoStream)) 
         { 
          _streamWriter.Write(plainText); 
         } 
         return Convert.ToBase64String(_memoryStream.ToArray()); 
        } 
       } 
      } 
     } 

расшифровке:

private string DecryptString(string cipherText, byte[] Key) 
     { 
      if (cipherText == null || cipherText.Length <= 0) 
       throw new ArgumentNullException("cipherText"); 
      if (Key == null || Key.Length <= 0) 
       throw new ArgumentNullException("Key"); 

      string plaintext = null; 

      byte[] _initialVector = new byte[16]; 
      byte[] _cipherTextBytesArray = Convert.FromBase64String(cipherText); 
      byte[] _originalString = new byte[_cipherTextBytesArray.Length - 16]; 

      Array.Copy(_cipherTextBytesArray, 0, _initialVector, 0, 16); 
      Array.Copy(_cipherTextBytesArray, 16, _originalString, 0, _cipherTextBytesArray.Length - 16); 

      using (Aes _aesAlg = Aes.Create()) 
      { 
       _aesAlg.Key = Key; 
       _aesAlg.IV = _initialVector; 
       ICryptoTransform decryptor = _aesAlg.CreateDecryptor(_aesAlg.Key, _aesAlg.IV); 

       using (MemoryStream _memoryStream = new MemoryStream(_originalString)) 
       { 
        using (CryptoStream _cryptoStream = new CryptoStream(_memoryStream, decryptor, CryptoStreamMode.Read)) 
        { 
         using (StreamReader _streamReader = new StreamReader(_cryptoStream)) 
         { 
          plaintext = _streamReader.ReadToEnd(); 
         } 
        } 
       } 

      } 

      return plaintext; 
     } 

Код: AES_algorithm_withoutIv.

+0

Я хотел бы упомянуть, что это именно то, что мне было нужно, пытаясь заменить поведение ChilkatDotNet46 без расшифровки IV :) По крайней мере, у меня есть каждый символ после того, как 16-й будет извлечен правильно, а не для определения того, как байты закодированные, где определяется IV, должны быть дешифрованы ... –

+0

Обновить к моему комментарию. Стремясь к тому, что мне нужно, IV должно быть всего 16 нулей. –

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

  • Нет связанных вопросов^_^