我的要求是使用AES加密图像。我的方法是将图像转换为字节数组并应用加密。加密后将加密的字节数组转换回图像。
但在最后一部分中,没有从字节加密数组生成图像。
图像以字节数组加载
RandomAccessStreamReference rasr = RandomAccessStreamReference.CreateFromFile(storageFile);
var streamWithContent = await rasr.OpenReadAsync();
byte[] buffer = new byte[streamWithContent.Size];
await streamWithContent.ReadAsync(buffer.AsBuffer(), (uint)streamWithContent.Size, InputStreamOptions.None);
加密在以下代码中完成
IBuffer Buffer = CryptographicBuffer.CreateFromByteArray(buffer);
byte[] encrypted = null;
CryptographicBuffer.CopyToByteArray(CryptographicEngine.Encrypt(AES, Buffer, null),out encrypted);
return encrypted;
字节数组转换回图像
var pic = new BitmapImage();
var imageBytes = returned_value;
using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
{
using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0)))
{
writer.WriteBytes((byte[])imageBytes);
writer.StoreAsync().GetResults();
}
pic.SetSource(ms);
}
我尝试使用pic.PixelWidth
检查结果图像的尺寸,它只是0。
这可能或有任何建议吗?
答案 0 :(得分:0)
位图文件在实际图像之前有一些特定的标题信息。您需要正确创建该信息作为加密字节的标头。当然,加密的图像本身就是彩色像素的混合物。
有关您需要构建的标头的详细信息,请参阅BMP file format。