适用于minio的文件内容文件路径加解密工具类(AES对称加密)

当不能使用Minio官方的SSE-C和SSE-S3加密方案时,此Java工具类提供了一种高效的方法进行AES加密和解密,5MB文件的加解密时间在800ms以内。它利用Hutool库进行对称加密操作,支持文件的加密上传和解密下载。

在使用minio的情况下,官方提供两种方案来做对象加密,分别是SSE-C、SSE-S3。但是在某些情况下我们受限于条件没法快速的通过以上方案实现加密,那么这个工具类可以帮助你,此加密过程经测试效率很不错,5MB的文件加密解密整个过程在800ms以内。 

import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

import io.minio.MinioClient;

public class EncryptionUtil {
    static final String originKeyStr = "0123456789Abc@@@"; // 必须16个字符
    private static SymmetricCrypto aes;

 
    // 加密并编码字符串
    public static String encryptURLEncodeStr(String str) {
        try {
            if (aes == null) {
                SecretKey aesKey = new SecretKeySpec(originKeyStr.getBytes(StandardCharsets.UTF_8), "AES");
                byte[] key = aesKey.getEncoded();
//构建
                aes = new SymmetricCrypto(SymmetricAlgorithm.AE
### MinIO 文件加密方法及配置教程 #### 1. 使用 HashiCorp Vault 和 KES 插件实现文件加密 HashiCorp Vault 提供了一种安全的方式来管理密钥和敏感数据。通过启用 Key Encryption Service (KES) 插件,可以为 MinIO 的对象存储提供透明的数据加密功能。 - 安装并初始化 HashiCorp Vault 后,需加载 KES 插件以支持 MinIO 加密需求[^1]。 - 在 Vault 中创建一个用于 MinIO 数据加密的密钥,并将其绑定到特定的角色或策略中。 ```bash vault secrets enable kes vault write kes/keys/my-minio-key type=aes-gcm key_size=256 ``` 上述命令启用了 KES 功能,并生成了一个名为 `my-minio-key` 的 AES-GCM 类型密钥,大小为 256 位。 #### 2. 配置 MinIO 使用外部 KMS(Key Management System) MinIO 支持与 AWS KMS 或其他兼容标准的 KMS 进行集成。为了使用 HashiCorp Vault 作为 KMS: - 设置环境变量来指定 KMS 地址以及相关参数: ```bash export MINIO_KMS_VAULT_ADDR=http://localhost:8200 export MINIO_KMS_VAULT_ROLE=my-vault-role export MINIO_KMS_VAULT_KEY_NAME=my-minio-key ``` 这些变量定义了 Vault API 的地址、角色名称以及之前创建的密钥名。 - 启动 MinIO 并验证其是否成功连接至 Vault KMS: ```bash ./minio server --address :9000 /data ``` 如果一切正常,则每次写入新对象时都会自动应用由 Vault 管理的加密密钥。 #### 3. Java SDK 对象级加密操作 除了服务器端的整体加密外,在客户端也可以利用 MinIO SDK 来实施更细粒度的对象保护措施。例如,当上传文件时可设置 SSE-C(Server-Side Encryption with Customer Provided Keys),即客户自定义加密方式[^3]。 以下是基于 Java 的示例代码片段展示如何上传带有 SSE-C 头部信息的文件: ```java import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.SseCustomerKey; public class SSECExample { public static void main(String[] args) throws Exception { // 初始化 MinIO Client 实例 MinioClient minioClient = new MinioClient( "http://localhost:9000", "minioadmin", "minioadmin" ); String bucketName = "testbucket"; String objectName = "encrypted-file.txt"; byte[] encryptionKeyBytes = new byte[32]; // 自己生成或者读取已有的 256-bit 密钥 try ( java.io.InputStream inputStream = java.nio.file.Files.newInputStream(java.nio.file.Paths.get("/path/to/file")) ) { PutObjectArgs putObjectArgs = PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(inputStream, inputStream.available(), -1) .sse(new SseCustomerKey(encryptionKeyBytes)) .build(); minioClient.putObject(putObjectArgs); } } } ``` 此程序段展示了怎样借助 MinIO Java 库完成带 SSE-C 参数的对象上传过程。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值