我对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 []数组或出错?
答案 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];
和picture
到new byte[]
,其长度至少等于实际图像数据长度,如下所示:
byte[] picture = new byte[pictureFull.Length - 54];
然后你可以把东西复制给他们。