我对 C# 还很陌生,并且收到了这个关于图像的 AES 加密项目。我在这里可能缺少一件非常简单的事情。我正在尝试从 bmp 中删除 header 并加密其余部分,然后将 header 添加回来。如果我不删除 header ,程序就可以正常运行。为了删除,我尝试了这个(bmp header是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[] 数组或者有什么问题?
最佳答案
尝试用它代替 FOR:
byte[] pictureFull = ms.ToArray();
byte[] Header = pictureFull.Take(54);
byte[] picture = pictureFull.Skip(54);
并继续加密。 PS 不要忘记添加 System.Linq 命名空间
关于c# - 删除bmp头进行加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14606565/