Android - 提高加密速度

时间:2011-02-15 11:57:00

标签: android image encryption image-processing

我不确定这是否可行...我的应用程序中有代码加密图像......

Cipher cipher;
SecretKey key;
byte[] buf = new byte[1024];
DesEncrypter() {
   byte[] iv = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
      0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 };
   key = new SecretKeySpec(iv, "AES");
   try {
     cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
     cipher.init(Cipher.ENCRYPT_MODE, key);          
   } 
   catch (NoSuchProviderException e) {}
 }        

public void encrypt(InputStream in, OutputStream out) {
    try {
      out = new CipherOutputStream(out, cipher);
      int numRead = 0;
      while ((numRead = in.read(buf)) >= 0) {
          out.write(buf, 0, numRead);
      }
      out.close();
    } 

每次我加密或解密图像(我的应用程序都有很多)时,需要花费很长时间,有关如何增加流程以便用户获得更好体验的任何提示?

5 个答案:

答案 0 :(得分:3)

如果您愿意为速度交换一点安全性,那么您只能加密图片的特定部分:例如,每1000字节数据流中的前100个字节。

另外,使用AsyncTask,正如@Estel建议的那样,这样您的UI就不会受到延迟。

答案 1 :(得分:2)

您可以选择不同的AES模式,这与ECB不同。不仅仅是为了速度,而是为了加密图像的ECB而不是better job

答案 2 :(得分:1)

我最好的建议是增加缓冲区的大小

答案 3 :(得分:1)

如果您的用户体验受到影响,您是否已将此加密算法放在ASyncTask中?对于像这样的昂贵操作,ASyncTask是保持用户体验顺畅的必要条件。

答案 4 :(得分:0)

  1. 使用更大的缓冲区
  2. 使用AsyncTask。您甚至可以在通知栏中显示用户进度,这应该让他高兴。
  3. 使用NDK编写加密的本机代码