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

问题描述

我需要使用加密 AES256 的 Mule 4 压缩负载输出 CSV 的 dataweave 脚本)。

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

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

有什么想法吗?

干杯, 史蒂夫

解决方法

仅加密文件是行不通的,因为 Zip 格式要求加密文件使用 encryption header

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

您可以尝试实现自己的模块或扩展现有的 Compression module 以支持加密。您也可以只调用 Java 类来执行此操作,但它不会在 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 类:

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;

import net.lingala.zip4j.model.enums.EncryptionMethod;

公共类 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 中的 deps:

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