我在java中尝试此代码,因为android内部也使用java。 我的问题是如何破坏(加密)mp4视频,这样即使有些人复制这些视频,它也无法播放。
我尝试通过在该文件的结尾位置添加“hi”来破坏mp4视频,以便文件损坏并且vlc播放器无法播放。我能够成功破坏视频。 VLC无法播放视频。
在解密时,我们正在读取该文件中除最后2个字符“hi”之外的内容,并将内容复制到另一个文件中,以检查我是否可以正确解密。 但是问题是去加密的视频没有正常播放.VLC没有报告任何错误,但是显示绿色窗口代替视频,声音也没有出现。 解密后,文件大小正常符合预期。
我怀疑的是,当我读取mp4文件的数据并复制到其他文件时,有些文件属性丢失了,这就是为什么vlc可能无法以它应该播放的方式播放的原因。如果在这种情况下,有没有办法手动将mp4属性设置为解密文件,以便vlc可以正常播放?
我知道有很多密码类可以做到这一点,但遗憾的是加密和解密大小为50mb的视频文件可能太慢了。我不希望我的视频用户延迟超过5秒。我已经尝试过密码,但速度很慢,有时超过30秒,这可能会激怒支付视频费用的真正视频用户。
我只想要一个非常轻量级的安全模型,它可以在一定程度上保护我的视频(如你所知,锁不适合小偷)。
如果有人试过像这样的简单算法,手动破坏mp4视频并在播放前动态解密,请帮助我。除此之外,我们还隐藏文件,更改文件的扩展名,以及将视频拆分为较小的文件,这些文件将在播放前通过我们的应用程序合并。
我试过的代码,粘贴在这里。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.DosFileAttributes;
public class Testing {
public static void main(String[] args) {
File file = new File("e:/ascii.mp4"); //original file path
File file2 = new File("e:/satish.mp4"); //encrypted file path
File file3 = new File("e:/satish2.mp4"); //decrypted file path
try {
String s = new String(Files.readAllBytes(file.toPath()));
s = s+"hi"; //appending hi to mp4 content
FileWriter fw = new FileWriter(file2);
fw.write(s); //writing mp4 content + hi to encrypted file
fw.close();
String s2 = new String(Files.readAllBytes(file2.toPath()));
s2 = s2.substring(0, s2.length()-1-2); //reading content except last 2 characters.
FileWriter fw2 = new FileWriter(file3); //decrypted file
fw2.write(s2); //writing content to decrypted file.
fw2.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
答案 0 :(得分:0)
最后,我能够得到解决方案。 我使用了逻辑http://rubular.com/r/lVLXzMllzF,但我在链接本身中指定了很少的修改。我能够在4秒内解密我的52 MB视频。