删除bmp标头进行加密

时间:2013-01-30 14:38:30

标签: c# encryption header 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 []数组或出错?

2 个答案:

答案 0 :(得分:3)

尝试使用而不是FOR:

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

继续加密。 PS不要忘记添加System.Linq命名空间

答案 1 :(得分:0)

byte[]是一个对象,因此您不希望将该类型的变量初始化为null。您可能希望像这样初始化Header

byte[] Header = new byte[54];

picturenew byte[],其长度至少等于实际图像数据长度,如下所示:

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

然后你可以把东西复制给他们。