如何解密内存中的加密图像&在应用程序中使用

时间:2013-09-18 06:12:27

标签: c# wpf encryption

我正在使用WPF应用程序,该应用程序正在使用文件夹中的资源(图像,视频等),我正在通过给定的加密机制加密所有资源

现在当我通过应用解密技术来使用资源时,我需要将文件保存在本地驱动器和放大器的某个位置。在应用程序中使用,我不希望它因为当文件被解密时用户可以看到文件&改变它。

是否可以解密文件,例如内存和放大器中的图像在没有将文件保存在内存中的应用程序中使用它。

public class EncryptFile_DecryptFile   
{   
   #region Encrypt Images & save it  
   public string EncryptFile(Image img,string ImagePath_to_Save)  
    {          
       byte[] ImageBytes;
        ImageBytes = imageToByteArray(img);   

            for (int i = 0; i < ImageBytes.Length; i++)
            {
                ImageBytes[i] = (byte)(ImageBytes[i] ^ 5);
            }
            File.WriteAllBytes(ImagePath_to_Save, ImageBytes);
     return ImagePath_to_Save;
    }
   #endregion
   #region Convert Image in to Byte
   public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        return ms.ToArray();
    }
    #endregion


   #region Decrypt Image & save it
   public string DecryptFile(string ImagePath_to_Save)
    {
             byte[] ImageBytes;

            ImageBytes = File.ReadAllBytes(ImagePath_to_Save);

            for (int i = 0; i < ImageBytes.Length; i++)
            {
                ImageBytes[i] = (byte)(ImageBytes[i] ^ 5);
            }

            File.WriteAllBytes(ImagePath_to_Save, ImageBytes);
             return ImagePath_to_Save;

    }
   #endregion
}

否则,请建议我在应用程序中使用加密资源的另一种方法。

1 个答案:

答案 0 :(得分:2)

您可以使用MemoryStream而不是FileStream。这样可以将您的图像保存在内存中。

以下是如何实施它。

public Stream DecryptFile(string encryptedImageFile){
  byte[] ImageBytes;

  ImageBytes = File.ReadAllBytes(encryptedImageFile);

  for (int i = 0; i < ImageBytes.Length; i++){
    ImageBytes[i] = (byte)(ImageBytes[i] ^ 5);
  }

  return new MemoryStream(ImageBytes);
}