c# - 删除bmp头进行加密

标签 c# encryption header bmp

我对 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/

相关文章:

c# - Xamarin.Forms:自定义 ListView 单元格的数据绑定(bind)

c# - Entity Framework 核心数据库首先不渲染存储过程模型?

c# - 如何在不使用 MVVM 的情况下绑定(bind) DependencyProperty

Android - ListActivity,添加页眉和页脚 View

c# - asp.net 中的 GridView 标题文本

c# - 无法按索引访问 DataGridViewRow 单元格

java - BouncyCaSTLe 解密 - PartialInputStream 中的流过早结束

c# - HMC SHA1 哈希 - C# 生成与 Ruby 不同的哈希输出

c - 使用 PBC 将一个元素散列到另一个元素中

php - jquery ajax调用后如何将文件输出到浏览器