繁体   English   中英

Java - 加密/解密错误

[英]Java - Encryption/Decryption error

在我们的Java应用程序中,我们使用JDK JCA API创建加密的zip。 使用的算法是基于密码的加密PBEWithMD5AndDES。 我们面临的问题是在解压缩期间,它无法间歇性地解除以下异常。

Caused by: `java.lang.IllegalArgumentException: MALFORMED;`  
`java.util.zip.ZipCoder.toString(ZipCoder.java:58);`  
`java.util.zip.ZipCoder.toStringUTF8(ZipCoder.java:117);`  
`java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:297);`  
`java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:121);`  

大多数情况下,它在解密期间从API中的ZipFile,ZipEntry实用程序类失败。

请提供一些关于上述问题的意见。

我们使用的编码字符集是Charset.forName(“US-ASCII”); 这是否有助于解决问题,因为我们将上述堆栈跟踪中的错误视为java.util.zip.ZipCoder.toStringUTF8(ZipCoder.java:117)

之前没有设置charset。 这是我们读它的方式,

try { zipFileInputStream = new ZipInputStream(new FileInputStream(zipFile)); 
    ZipEntry zipEntry = null; 
    while ((zipEntry = zipFileInputStream.getNextEntry()) != null) { 
       String zipEntryFileName = zipEntry.getName(); 
       if (StringUtils.isExactMatch(fileHasWeekNumberRegEx, zipEntryFileName)) {      
        //do something break; 
       } 
    } 
} 
catch (IOException e) { } 
finally { 
    zipFileInputStream.close(); 
}

但是这适用于其他加密的拉链,即使它没有设置。 并非所有拉链都能正常工作。这个问题间歇性地发生。

任何帮助将不胜感激?

谢谢。

之前没有设置charset。 这是我们读它的方式,

try {
    zipFileInputStream = new ZipInputStream(new FileInputStream(zipFile));
    ZipEntry zipEntry = null;

    while ((zipEntry = zipFileInputStream.getNextEntry()) != null) {
        String zipEntryFileName = zipEntry.getName();
        if (StringUtils.isExactMatch(fileHasWeekNumberRegEx, zipEntryFileName)) {
            //do something
            break;
        }
    }
} catch (IOException e) {
} finally {
    zipFileInputStream.close();
}

但是这适用于其他加密的拉链,即使它没有设置。 并非所有拉链都能正常工作。这个问题间歇性地发生。

关于编码Charset.forName("US-ASCII");道歉Charset.forName("US-ASCII"); 代码没有设置任何编码,而是使用默认的编码,在我的情况下是windows-1252。 尝试为windows-1252设置charset但仍然没有运气。 我们已检查输入和输出流对象是否已打开,并确保所有流对象都已正确关闭。 有关其他原因的任何建议可能会导致该问题吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM