【问题标题】:Android AES/CBC/PKCS5Padding encryptionAndroid AES/CBC/PKCS5Padding 加密
【发布时间】:2017-09-04 01:21:56
【问题描述】:

我正在读取一个包含加密数据的数据库。我可以读取解密内容,但无法解密我加密的内容。结果不一样:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
SecretKey skey = new SecretKeySpec(key, 0, key.length, "AES");

这是我解密字符串的方法:

public byte[] decrypt(byte[] data) {                                                                                                                                                                                                                               
    byte[] result = new byte[0];                                                                                                    
    try {                                                                                                                           
        cipher.init(DECRYPT_MODE, skey, new IvParameterSpec(iv));                                                                   

        InflaterInputStream inflaterStream = new InflaterInputStream(
            new CipherInputStream(new ByteArrayInputStream(data), cipher));
        return IOUtils.toByteArray(inflaterStream);                                                                                 
    } catch (Exception e) {                                                                                                         
        e.printStackTrace();                                                                                                        
        return result;                                                                                                              
    }                                                                                                                               
}

这是我加密字符串的方法:

public byte[] encrypt(byte[] data) {                                                                                                                         
    try {                                                                                                                          
        cipher.init(ENCRYPT_MODE, skey, new IvParameterSpec(iv));                                                                  
        DeflaterInputStream deflaterInput = new DeflaterInputStream(
            new CipherInputStream(new ByteArrayInputStream(data), cipher));

        return IOUtils.toByteArray(deflaterInput);                                                                                 
    } catch (Exception e) {                                                                                                        
        e.printStackTrace();                                                                                                       
        return new byte[0];                                                                                                        
    }                                                                                                                              
} 

我得到的错误是这样的:

W/System.err: java.util.zip.ZipException: incorrect header check
W/System.err:     at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:170)
W/System.err:     at java.io.FilterInputStream.read(FilterInputStream.java:107)
W/System.err:     at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2146)
W/System.err:     at org.apache.commons.io.IOUtils.copy(IOUtils.java:2102)
W/System.err:     at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2123)
W/System.err:     at org.apache.commons.io.IOUtils.copy(IOUtils.java:2078)
W/System.err:     at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:721)

【问题讨论】:

  • 错误“java.util.zip.ZipException:不正确的标头检查”与加密/解密无关。它说 Java zip 实用程序认为它不是有效的 Zip 文件。可能文件是使用其他算法压缩的,比如 tar 或 gzip ,您可能必须使用对应的 Java 实用程序。

标签: java android encryption cryptography


【解决方案1】:

您的加密流嵌套不正确。在加密时它应该是

new CipherInputStream(new DeflaterInputStream(new ByteArrayInputStream(data)), cipher);

解密时应该是

new InflaterInputStream(new CipherInputStream(new ByteArrayInputStream(data), cipher));

这就是你得到它的方式并且是正确的。

【讨论】:

  • 你是救世主!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 2018-11-28
相关资源
最近更新 更多