如何在 Mule 4 中使用密码压缩有效载荷?

How to compress a payload with a password in Mule 4?

我需要使用加密 AES256 的 Mule 4 压缩有效载荷(输出 CSV 的数据编织脚本)。

我检查了 Mule 4 的压缩模块,它不支持密码,我尝试将它与加密模块结合使用,但它最终要么加密 zip 中的 CSV,要么加密 zip。

我也需要能够在 Cloudhub 中 运行 的解决方案。

有什么想法吗?

干杯, 史蒂夫

仅仅加密文件是行不通的,因为 Zip 格式需要 encryption header 来加密文件。

Mule 压缩模块使用 Apache Commons Compress 库来实现 Zip 文件,doesn't currently support Zip encrypted files

您可以尝试实现自己的模块或扩展现有的 Compression module 以支持加密。您也可以只调用 Java class 来完成它,但它不会在 Mule 应用程序中重用。

一个可用于实现加密 Zip 文件的库是 Zip4j,但可能还有其他库。由于它是一个 Java 实现,它应该适用于任何平台。

我的解决方案:

       <java:invoke-static doc:name="Invoke static" doc:id="6244c876-c938-4541-a8aa-a94d2198aa28" class="au.com.test.PasswordProtectedZip" method="zip(String, String)">

            <java:args ><![CDATA[#[{

 "fileName": p('file.path') ++ vars.fileName,

 "password": p('secure::encryption.password')

}]]]>

       </java:invoke-static>

Java Class:

package au.com.test;

进口java.io.File;

进口java.io.IOException;

导入java.util.Arrays;

进口java.util.List;

导入net.lingala.zip4j.ZipFile;

导入net.lingala.zip4j.model.ZipParameters;

导入net.lingala.zip4j.model.enums.AesKeyStrength;

导入 net.lingala.zip4j.model.enums.EncryptionMethod;

public class PasswordProtectedZip {

 public static File zip(String fileName, String password) {

       System.out.println("Zipping " + fileName);

       File file = null;

       try {

            ZipParameters zipParameters = new ZipParameters();

            zipParameters.setEncryptFiles(true);

            zipParameters.setEncryptionMethod(EncryptionMethod.AES);

            zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);



            List<File> filesToAdd = Arrays.asList(new File(fileName));



            ZipFile zipFile = new ZipFile(fileName + ".zip", password.toCharArray());

            zipFile.addFiles(filesToAdd, zipParameters);

            file = zipFile.getFile();

            System.out.println("file = " + file.getAbsolutePath());

            zipFile.close();

       } catch (Exception e) {

            e.printStackTrace();

       }



       return file;

 }

}

pom.xml 中的部门:

    <dependency>
        <groupId>net.lingala.zip4j</groupId>
        <artifactId>zip4j</artifactId>
        <version>1.3.1</version>
    </dependency>