2017-01-05 39 views
1

Javaアプリケーションでは、JDK JCA APIを使用して暗号化されたzipを作成します。使用されるアルゴリズムは、パスワードベースの暗号化PBEWithMD5AndDESです。私たちが直面している問題は、解凍中です。断続的に以下の例外で解凍できません。Java - 暗号化/復号化エラー

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のZipEntryユーティリティクラスがZipFileで失敗します。

上記の問題の一部を入力してください。

私たちが使用するエンコード用の文字セットは、Charset.forName( "US-ASCII")です。 上記のスタックトレースに関連するエラーがjava.util.zip.ZipCoder.toStringUTF8(ZipCoder.java:117)として表示されるため、これは問題の原因となりますか

文字セットが以前に設定されていません。ここに私たちがそれを読む方法はありますか?

これは設定されていなくても、他の暗号化されたzipでも動作します。すべてのzipが正しく動作するわけではありません。この問題は断続的に発生します。

何か助けていただければ幸いですか?

ありがとうございました。

+2

この問題は、あなたが提供していないコードの詳細を中心にしています。私たちは、この種の質問に対する有益な答えを得るために問題を示す[mcve]を準備し提示することを期待しています。ボーナスとして、MCVEを準備するプロセス自体があなたを解決策に導くかもしれません。 –

答えて

0

文字セットが以前に設定されていません。

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(); 
} 

しかし、これが設定されていない場合でも、他の暗号化されたzipで動作します。すべてのzipが正しく動作するわけではありません。この問題は断続的に発生します。

+0

これで問題は解決しませんでした。他の考え? –

0

エンコードに関するお詫びCharset.forName("US-ASCII");。コードはエンコーディングを設定しませんが、私の場合はwindows-1252というデフォルトのものを使用します。 Windows-1252の文字セットを設定しようとしましたが、まだ運がありません。入力および出力ストリームオブジェクトが開いているかどうかを確認し、すべてのストリームオブジェクトが適切に閉じられていることを確認しました。潜在的に問題に寄与している他の原因に関する提案?