C# 解密视频文件并在不保存的情况下播放

C# 解密视频文件并在不保存的情况下播放,c#,asp.net,encryption,C#,Asp.net,Encryption,我的一个客户希望在USB中保护视频拷贝,为此我想到了以下方法: 1) 加密视频文件 2) 将加密文件放入USB 3) 对加密文件进行解密的解密程序 4) 从解密文件中获取视频 5) 最后播放视频 我成功地加密了一个视频(xyz.enc文件),并解密了它。 现在,我不知道如何从解密文件中获取视频,并在不存储的情况下播放它。 我花了3个小时在谷歌上搜索,但什么都没找到。我在ASP.net&C工作 要对视频文件进行复制保护,最好的方法是对其应用DRM。通过这种方式,你可以限制它应该播放的时间,或者它应

我的一个客户希望在USB中保护视频拷贝,为此我想到了以下方法:

1) 加密视频文件

2) 将加密文件放入USB

3) 对加密文件进行解密的解密程序

4) 从解密文件中获取视频

5) 最后播放视频

我成功地加密了一个视频(xyz.enc文件),并解密了它。 现在,我不知道如何从解密文件中获取视频,并在不存储的情况下播放它。
我花了3个小时在谷歌上搜索,但什么都没找到。我在ASP.net&C工作

要对视频文件进行复制保护,最好的方法是对其应用DRM。通过这种方式,你可以限制它应该播放的时间,或者它应该对用户可用的时间,但是这仍然可以通过很多方式来打破

您无法使任何视频100%受拷贝保护。请阅读下面的文章。如果是这样的话,好莱坞电影将不会通过torrent网络免费播放


这是一个相当古老的话题,但对于开发人员来说,这项任务似乎仍然是实际的

正如人们所说,100%的拷贝保护是不可能的,但你可以让黑客更努力地工作

其目的是拦截ReadFile、SetFilePointer等文件调用,并向播放器提供解密数据,请阅读以下教程:

我用C语言中的SHA1算法对视频进行了加密和解密#


ASP.NET,USB?这两种不同的技术是如何结合在一起的?
  var actualFilepath= "D:\\Video\\Sample.mp4";
  var videoBytes=ConvertVideoToBytes(actualFilepath);
  var encryptedvideoBytes=EncryptVideo(videoBytes);
  ConvertEncryptFileToFile(encryptedvideoBytes);
  var encryptedFilepath = "D:\\Video\\VideosEncryptedFile.deific";
   var readVideoBytes = ConvertVideoToBytes(encryptedFilepath);
   var decryptedVideoBytes = DecryptVideo(readVideoBytes);
   ConvertDecryptFileToFile(decryptedVideoBytes);



  private byte[] ConvertVideoToBytes(string filePath)
  {            
   return System.IO.File.ReadAllBytes(filePath);            
  }


   private byte[] EncryptVideo(byte[] videoBytes)
   {
        string passPhrase = "mypassphrase27092019";
        string saltValue = "mysaltvalue";
        RijndaelManaged RijndaelCipher = new RijndaelManaged();
        RijndaelCipher.Mode = CipherMode.CBC;
        byte[] salt = Encoding.ASCII.GetBytes(saltValue);
        PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, salt, 
     "SHA1", 2);
        ICryptoTransform Encryptor = 
        RijndaelCipher.CreateEncryptor(password.GetBytes(32), password.GetBytes(16));

        MemoryStream memoryStream = new MemoryStream();
        CryptoStream cryptoStream = new CryptoStream(memoryStream, Encryptor, 
        CryptoStreamMode.Write);
        cryptoStream.Write(videoBytes, 0, videoBytes.Length);
        cryptoStream.FlushFinalBlock();
        byte[] cipherBytes = memoryStream.ToArray();

        memoryStream.Close();
        cryptoStream.Close();

        return cipherBytes;
    }


    private void ConvertEncryptFileToFile(byte[] encryptedvideoBytes)
    {
        var filePath = string.Empty;
        filePath = "D:\\Video";
        System.IO.File.WriteAllBytes(filePath+"\\VideosEncryptedFile.deific", 
     encryptedvideoBytes);
     }


    private byte[] DecryptVideo(byte[] encryptedVideoBytes)
     {
        string passPhrase = "mypassphrase27092019";
        string saltValue = "mysaltvalue";

        RijndaelManaged RijndaelCipher = new RijndaelManaged();

        RijndaelCipher.Mode = CipherMode.CBC;
        byte[] salt = Encoding.ASCII.GetBytes(saltValue);
        PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, salt, "SHA1", 2);

        ICryptoTransform Decryptor = RijndaelCipher.CreateDecryptor(password.GetBytes(32), password.GetBytes(16));

        MemoryStream memoryStream = new MemoryStream(encryptedVideoBytes);
        CryptoStream cryptoStream = new CryptoStream(memoryStream, Decryptor, CryptoStreamMode.Read);
        byte[] plainBytes = new byte[encryptedVideoBytes.Length];

        int decryptedCount = cryptoStream.Read(plainBytes, 0, plainBytes.Length);

        memoryStream.Close();
        cryptoStream.Close();

        return plainBytes;
    }


  private void ConvertDecryptFileToFile(byte[] decryptedVideoBytes)
    {
        var filePath = string.Empty;
        filePath = "D:\\Video";
        System.IO.File.WriteAllBytes(filePath + "\\FinalFile.mp4", 
        decryptedVideoBytes);
    }