【问题标题】:Android AES/CBC encryptionAndroid AES/CBC 加密
【发布时间】:2015-09-16 07:41:30
【问题描述】:

目前我正在使用 javax.crypto.cipher 库使用 AES/CBC 加密,但是,我发现它有点太慢了。解密一个 10 分钟的 .mp4 视频文件需要 45s-1m 之间的时间。

有没有更好的方法在 Android 上执行此操作?我环顾四周,发现了一些关于 openssl 的帖子,但它真的那么快吗?

任何链接、有用的帖子和/或 cmets 将不胜感激。

【问题讨论】:

  • "10 分钟 mp4" 绝对没有任何意义。一个永不改变的 1x1 像素将是一个小文件,而 10 分钟 4k 分辨率的纯静态文件将是巨大的。 aes 不在乎数据是什么。加密/解密 10meg .gif 所需的时间与 10meg .txt 或任何其他 10 meg 文件一样长。
  • 是否有任何本机库可以更好地解决此问题?主要问题是该应用程序是一个录像机,并且视频长度可能为 1 小时甚至更长,在这种情况下解密会更长。

标签: java android encryption openssl aes


【解决方案1】:

使用流而不是文件解密。如果您流式传输视频,您可以根据需要简单地执行视频解密。如果您使用 CTR 或 CBC 模式,您甚至可以跳到流中的特定位置,但需要一些额外的技巧才能实现。

将解密留给默认提供者应该是首选,但您当然可以使用本机解密库来加快速度。

【讨论】:

  • 你知道我可以使用哪些本地库吗?
  • 很遗憾我没有。
【解决方案2】:

愿意在开始播放之前解密整个视频会使用户面临明显的延迟。您应该考虑使用流式架构。

典型的设计涉及 javax.crypto.CipherInputStream 类和本地 http 实例。 SDK 中没有 http server 的类,你必须自己实现或寻找类似于 LocalSingleHttpServer 的现有库。

看起来像:

mServer = new LocalSingleHttpServer();
mServer.setCipher(myGetCipher());
mServer.start();
path = mServer.getURL(path);
mVideoView.setVideoPath(path);
mVideoView.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 2019-08-17
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多