删除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); 

问题是,如果我尝试继续加密和解密“图片”,我得到一个空值。 如果我继续使用完整图像“pictureFull”进行enc / dec,我也会得到一个空值。 我需要完全删除FOR,以便程序通常“pictureFull”加/解,尽管FOR甚至不修改它。 有没有其他方法来保存byte []数组或什么是错的?

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命名空间