【问题标题】:Using Java - Encrypting sd card video by writing a random byte into the file使用 Java - 通过将随机字节写入文件来加密 sd 卡视频
【发布时间】:2016-01-10 22:59:54
【问题描述】:

我正在 java 中尝试此代码,因为 android 内部也使用 java。 我的问题是如何破坏(加密)一个 mp4 视频,这样即使有人复制了这些视频,它也不会播放。

我尝试通过在该文件的结束位置添加“hi”来破坏 mp4 视频,从而使文件损坏并且 vlc 播放器无法播放。我可以成功地破坏视频。 VLC 不再能够播放视频。

解密时,我们正在从该文件中读取除最后两个字符“hi”之外的内容,并将内容复制到另一个文件中,以检查我是否可以正确解密。 但问题是解密后的视频无法正常播放。VLC 没有报告任何错误,但视频显示绿色窗口,声音也没有。 解密后文件大小符合预期。

我的疑问是,当我读取 mp4 文件的数据并复制到其他文件时,缺少一些 mp4 文件属性,这就是 vlc 可能无法按应有方式播放的原因。如果是这样的话,有没有办法手动设置mp4属性到解密后的文件,让vlc可以正常播放?

我知道有很多密码类可以做到这一点,但不幸的是,加密和解密大小为 50mb 的视频文件可能太慢了。我不希望我的视频用户延迟超过 5 秒。我已经尝试过 cipher,但它很慢,有时需要超过 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();
        }
    }
}

【问题讨论】:

  • 数字版权管理系统旨在有效地完成这件事。尝试研究可用于 Android 上 MP4 文件的 DRM 系统。

标签: java android video encryption


【解决方案1】:

我终于能够得到解决方案。 我使用了逻辑of this question.,并在该链接本身中指定了一些修改。我可以在 4 秒内解密我的 52 mb 视频。

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 2011-04-12
    • 2019-12-21
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多