当前位置: 首页 > 知识库问答 >
问题:

Android:CipherStream-API用于AEAD密码,速度慢得令人无法接受

师谦
2023-03-14

我们有一个android应用程序,解密和加密大(高达100MB)文件的HTTP流。

因此,我们使用CipherInputStreamsCipherOutputStreams,这对AES/cbc/pkcs7padding非常有效。我们最近切换到aes/gcm/nopadding。现在,对于超过50MB的文件,加密和解密速度是不可接受的。

调试到android源代码,发现问题:https://android.googlesource.com/platform/libcore/+/master/ojluni/src/main/java/javax/crypto/cipherinputstream.java#112

此方法具有字节缓冲区“obuffer”,该缓冲区被重新分配并增加了512bits,直到它能够容纳整个消息为止(请参见行:https://android.googleSource.com/platform/libcore/+/master/ojluni/src/main/java/javax/crypto/cipherinputstream.java#121)

我知道关于这个方法的说明,它说在AEAD密码中,整个信息必须被缓冲。这是一个问题,因为我们不能将整个消息保存到内存缓冲区中。另一个问题是oBuffer经常被重新分配。

有什么解决方案可以将GCM与流式API一起使用吗?

共有1个答案

冯敏达
2023-03-14

将文件拆分为各个部分并链接是一种解决方案。

假设您将文件划分为n部分。用AES-GCM加密它们中的每一个,并添加以下内容。在加密前给每个部分加前缀如下;

tag_0 = ''
for i from 1 to n
    ciphertextBlock_i, tag_i = AES-GCM( i:n || tag_i-1 || plaintextBlock_i)
  • 在每个零件前缀零件号为i:n
  • 在除第一部分外的每个部分前缀前缀上一个部分的身份验证标记。

你也可以

  • 添加部件大小,然后
  • 如果您害怕重放攻击,也要添加加密时间。
 类似资料:
  • 我正在尝试加载一个由Thrift自动生成的大型java文件(大约240,000行,7.5mb)。我收到一条错误消息“文件大小超过配置限制(2560000)。代码洞察功能不可用。”现在我知道我应该转到idea.properties文件并更改行 idea.max.intellisense.filesize=2500 到一个很大的数字。然而,如果我为这个文件启用了Code insight,它的加载和滚动

  • 问题内容: 我在调试此问题时非常困难。每当我尝试与postgres建立连接时,都需要花费一分钟的时间。建立连接后,一切正常。我尝试禁用所有映射并且不加载任何映射,但是仍然需要花费很长时间来获取连接。我也尝试过禁用验证,没有区别。当我使用简单的简单JDBC连接时,它是瞬时的。Hibernate所做的事情需要花费大量时间,而我似乎无法缩小范围。任何输入,不胜感激! Postgres驱动程序: 配置设置

  • 作为我的问题在x86-64中使用32位寄存器/指令的优势的后续行动,我开始衡量指令的成本。我知道这已经做过多次了(例如 Agner Fog),但我这样做是为了娱乐和自我教育。 我的测试代码非常简单(为了简单起见,这里作为伪代码,实际上是在汇编程序中): 但是有些事情还是应该考虑的。 如果循环的内部很大(大 -指令是站不住脚的。对于< code > jmp -指令,我的测试代码如下所示: 其结果是:

  • 对于我的密码强度检查器,我无法显示从我输入的密码获得的分数。下面是代码,问题一直显示在我的代码底部: /***确定给定字符串是否包含大写字母*@param s要检查的字符串*@return true当且仅当s包含大写字母*/public static boolean containsUpperCase(string s){for(int letter=0;letter=0){return true

  • 对于我的项目,我们被要求实现我们自己的连接池。我们不允许使用来自jdbc的PGPoolingDataSource。当我使用jdbc池时,我的程序运行得非常快,而我自己的连接池运行得不可预测,速度也慢得多。我的连接使一些任务等待了很长时间,这是jdbc池所没有的。 我正在使用Arrayblockingqueue实现连接池,我只是创建一个预先说过的连接数,然后让客户机借用并放回。 我是说这对我来说似乎

  • 本文向大家介绍连接MySql速度慢的解决方法(skip-name-resolve),包括了连接MySql速度慢的解决方法(skip-name-resolve)的使用技巧和注意事项,需要的朋友参考一下 最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。 原因