Я пытаюсь использовать System.Security.Cryptography.AesManaged
для шифрования файла в моем приложении .net. Его необходимо расшифровать во встроенной среде Linux, поэтому библиотеки .net будут мне недоступны.
Код, который у меня есть на данный момент, выглядит примерно так:
string encPassword = "ABCDABCDABCDABCDABCDABCDABCDABCD";
string sourceFile = "myFile.txt";
string targetFile = "myFile.encrypted.txt";
FileStream fsInput = = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);
FileStream fsOutput = new FileStream(targetFile, FileMode.OpenOrCreate, FileAccess.Write);
CryptoStream cryptoStream = null;
try
{
byte[] key = Encoding.ASCII.GetBytes(encPasswd);
byte[] IV = new byte[16];
Array.Copy(key, 0, IV, 0, 16);
AesManaged aes = new AesManaged();
aes.Key = key;
aes.IV = IV;
aes.BlockSize = 128;
aes.KeySize = 256;
aes.Mode = CipherMode.CBC;
ICryptoTransform encryptor = aes.CreateEncryptor();
cryptoStream = new CryptoStream(fsOutput, encryptor, CryptoStreamMode.Write);
byte[] buffer = new byte[BUFFER_LENGTH];
long bytesProcessed = 0;
long fileLength = fsInput.Length;
int bytesInCurrentBlock;
do
{
bytesInCurrentBlock = fsInput.Read(buffer, 0, BUFFER_LENGTH);
cryptoStream.Write(buffer, 0, bytesInCurrentBlock);
bytesProcessed = bytesProcessed + bytesInCurrentBlock;
}
while (bytesProcessed < fileLength);
return true;
}
// ...
Это нормально шифрует файл. Сейчас я пытаюсь расшифровать файл с помощью сторонней утилиты для Windows, которая также поддерживается в Linux, чтобы дать мне уверенность в том, что разработчик Linux сможет ее расшифровать.
Быстрый поиск по SourceForge позволил мне Enqrypt . Однако, если я использую Enqrypt
для зашифрованного файла, как это:
enqrypt.exe -d -aes -256 -cbc -k ABCDABCDABCDABCDABCDABCDABCDABCD myFile.encrypted.txt
, где -d
обозначает дешифрование, -256
обозначает размер ключа, -cbc
режим и -k
перед клавишей.
это не дает мне оригинальный файл.
Я пробовал это с несколькими сторонними утилитами, но не могу расшифровать его.
Существуют ли очевидные ошибки при попытке зашифровать и расшифровать этот файл?
Обновление
В ответ на рекомендации @ Paŭlo у меня теперь есть следующий тестовый код (не волнуйтесь, я планирую изменить ключ и IV, чтобы они отличались):
byte[] key = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 };
byte[] IV = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 };
Размер блока по-прежнему равен 128, а размер ключа по-прежнему равен 256.
Я сейчас пытаюсь расшифровать файл, используя openssl
примерно так:
openssl enc -d -aes-256-cbc -in c:\encrypted.txt -out c:\decrypted.txt -K 11223344556677881122334455667788 -iv 11223344556677881122334455667788
Это приводит к следующей ошибке:
bad decrypt 11452:error:06065064:digital envelope routines:EVP_DecryptFinal:bad decrypt:evp_enc.c:450:
Есть идеи, что я делаю не так?