Удалить заголовок bmp для шифрования

Я довольно новичок в C# и получил этот проект шифрования AES на изображениях. Там, наверное, очень простая вещь, которую я здесь скучаю. Я пытаюсь удалить заголовок из BMP и зашифровать остальные, а затем добавить заголовок обратно. Если я не удаляю заголовок, программа работает хорошо. Чтобы удалить, я попытался это (заголовок bmp составляет 54 байта):

MyImage = new Bitmap("path");
MemoryStream ms = new MemoryStream();

MyImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

byte[] Header=null, picture=null, pictureFull = ms.ToArray();


for (int i = 0; i < pictureFull.Length; i++)
{
    if (i < 54)
    { Header[i] = pictureFull[i]; }
    else 
    { picture[i - 54] = pictureFull[i]; }
}


byte[] demoKeyBytes = new byte[] {  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};

PaddingMode padding = PaddingMode.ISO10126;

EncryptedImg = EncryptCall(demoKeyBytes, padding, picture);

Проблема в том, что если я пытаюсь зашифровать и расшифровать "картинку", я получу нулевое значение. Я также получаю нулевое значение, если я перейду к enc/dec с полным изображением "pictureFull". Мне нужно полностью удалить FOR для того, чтобы программа обычно кодировала / dec "pictureFull", хотя это FOR даже не изменяет его. Есть ли другой способ сохранить массивы байтов [] или что-то не так?

2 ответа

Решение

byte[] является объектом, поэтому вы не хотите инициализировать переменную этого типа null, Вы, вероятно, хотите инициализировать Header как это:

byte[] Header = new byte[54];

а также picture к new byte[] с длиной, по меньшей мере, равной фактической длине данных изображения, например:

byte[] picture = new byte[pictureFull.Length - 54];

Тогда вы можете скопировать вещи на них.

Попробуйте это вместо FOR:

byte[] pictureFull = ms.ToArray();
byte[] Header = pictureFull.Take(54);
byte[] picture = pictureFull.Skip(54);

и продолжить шифрование. PS Не забудьте добавить пространство имен System.Linq

Другие вопросы по тегам