我的一位客户希望在USB中进行视频拷贝保护,我已经考虑过以下方式:
1)加密视频文件。
2)将加密文件放入USB中。
3)解密加密文件的解密程序。
4)从解密文件中获取视频。
5)最后播放视频。
我成功加密了视频(xyz.enc文件),并解密(xyz.dnc)。 现在,我不知道如何从该解密文件获取视频并在不存储的情况下播放它。 我花了3个小时在Google上搜索,但没有计算任何内容。我在ASP.net& C#。
答案 0 :(得分:0)
要复制保护视频文件,实现它的最佳方法是将DRM应用于它。通过这种方式,您可以限制它应该播放的次数或用户可以使用多长时间,但这仍然可以通过很多方式来解决。
您不能将任何视频100%复制保护。请阅读以下文章。如果是这样的话,好莱坞电影就不会通过洪流网络免费提供。
http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/DRM-Is-Dead-79353.aspx
答案 1 :(得分:0)
这是一个相当古老的话题,但对于开发人员而言,这项任务似乎仍然存在。
正如人们所说,100%的复制保护是不可能的,但你可以更加努力地进行黑客攻击。
这个想法是截取文件调用,如ReadFile,SetFilePointer,并向播放器提供解密数据,请阅读这里的教程: http://boxedapp.com/encrypted_video_streaming.html
答案 2 :(得分:0)
我已经使用C#中的SHA1算法对视频进行了加密和解密
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);
}