加密图像以形成另一个加密图像Windows Phone 8.1

时间:2015-12-16 16:58:26

标签: c# encryption windows-phone-8.1 bitmapimage

我的要求是使用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。

这可能或有任何建议吗?

1 个答案:

答案 0 :(得分:0)

位图文件在实际图像之前有一些特定的标题信息。您需要正确创建该信息作为加密字节的标头。当然,加密的图像本身就是彩色像素的混合物。

有关您需要构建的标头的详细信息,请参阅BMP file format