android-将字节从FileInputStream复制到CipherOutputStream(反之亦然)非常慢

android-将字节从FileInputStream复制到CipherOutputStream(反之亦然)非常慢,第1张

概述我一直在遵循教程“HowdoIencryptanddecryptfilesusingDES?”向现有的Android4应用添加简单的文件加密.一切工作正常,除了加密和解密非常非常慢.以下两种方法几乎是完整的教程:publicstaticvoidencryptOrDecrypt(Stringkey,intmode,InputStreamis,OutputStre

我一直在遵循教程“ How do I encrypt and decrypt files using DES?”向现有的AndroID 4应用添加简单的文件加密.

一切工作正常,除了加密和解密非常非常慢.

以下两种方法几乎是完整的教程:

public static voID encryptOrDecrypt(String key, int mode, inputStream is, OutputStream os) throws Throwable {    DESKeySpec dks = new DESKeySpec(key.getBytes());    SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");    SecretKey desKey = skf.generateSecret(dks);    Cipher cipher = Cipher.getInstance("DES"); // DES/ECB/PKCS5padding for SunJCE    if (mode == Cipher.ENCRYPT_MODE) {        cipher.init(Cipher.ENCRYPT_MODE, desKey);        CipherinputStream cis = new CipherinputStream(is, cipher);        docopy(cis, os);    } else if (mode == Cipher.DECRYPT_MODE) {        cipher.init(Cipher.DECRYPT_MODE, desKey);        CipherOutputStream cos = new CipherOutputStream(os, cipher);        docopy(is, cos);    }}public static voID docopy(inputStream is, OutputStream os) throws IOException {    byte[] bytes = new byte[64];    int numBytes;    // Why is this taking so long?    while ((numBytes = is.read(bytes)) != -1) {        os.write(bytes, 0, numBytes);    }    os.flush();    os.close();    is.close();}

非常简单和基本,但是解密/加密1 MB文件大约需要20-30秒.详细地说,是while循环在两个流之间复制字节,这太慢了.

将byte []的大小更改为较大的值(如65536)以一次读取更多字节不会改变任何内容.我认为一次读取更多字节将加快处理速度,但事实并非如此.

在没有加密的情况下在“正常”流之间复制数据不会花费很长时间.真的是这种昂贵的加密吗?我已经在其他平台上使用了类似的加密,而这样的延迟从来都不是问题.

本教程使用DES,但将算法更改为其他内容,例如AES也不更改任何内容.

有什么想法可以加快速度吗?

解决方法:

我基本上在运行AndroID 4.4.4的Google LG Nexus 5上进行了一些实验,使用您的代码并加密了一个1000000(百万)字节的文件,并读取了/ sdcard文件系统的内容.

no crypt 1421 msAES ECB mode 2577 msDES ECB 3214

接下来,我稍微修改了您的代码以使用BufferedInputStream和BufferedOutputStream

no crypt 88 msAES ECB mode 855 msDES ECB mode 1419 MS

这表明时序对缓冲很敏感,并且AES比DES快.

提供程序名称为“ AndroIDOpenSSL”

总结

以上是内存溢出为你收集整理的android-将字节从FileInputStream复制到CipherOutputStream(反之亦然)非常慢全部内容,希望文章能够帮你解决android-将字节从FileInputStream复制到CipherOutputStream(反之亦然)非常慢所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1088333.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存