
Java sdk支持客户端加密,在上传之前加密文件以及在下载时解密. 客户端加密支持对称AES和非对称RSA加密. 这里的对称和非对称仅用于加密每次生成的随机密钥. 文件数据的加密始终使用AES256对称加密. 客户端加密适用于存储敏感数据的客户. 客户端加密将牺牲部分上传速度客户端文件加密软件,即内部SDK,对于块上传,使用串行上传.
客户端加密内部使用AES256来加密数据. 默认情况下,早期版本的JDK6〜JDK8不支持256位加密. 如果在运行时报告以下异常,则java.security.InvalidKeyException: 密钥大小或缺省参数非法. 我们需要添加oracle的JCE无策略限制权限文件,并将其部署在JRE环境中. 请根据当前使用的JDK版本下载相应的文件,将其解压缩并保存到JAVA_HOME下的jre / lib / security目录中.

JDK6 JCE补充包JDK7 JCE补充包JDK8 JCE补充包每次上载文件对象之前,我们随机生成一个对称加密密钥,该随机生成的密钥通过用户提供的对称或非对称密钥进行加密,Base64编码加密结果存储在对象的元信息中. 上传文件对象,并使用AES256算法对上传过程中的内存进行加密. 在文件元信息中获取加密所需的信息,base64用用户密钥进行解码和解密,然后获得加密数据的密钥. 使用密钥使用AES256对下载的输入流进行解密,以获得解密的文件输入流. 例子
使用对称AES256加密每次生成的随机密钥的示例(有关功能,请参见Java对称密钥生成的示例)

public void upload(){
buildAndSaveSymmetricKey();
SecretKey symKey = loadSymmetricAESKey();
EncryptionMaterials encryptionMaterials = new EncryptionMaterials(symKey);
// 使用AES/GCM模式,并将加密信息存储在文件元信息中.
CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption)
.withStorageMode(CryptoStorageMode.ObjectMetadata);
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setIsSubdomain(true);
client = new NOSEncryptionClient(new StaticCredentialsProvider(credentials),
new StaticEncryptionMaterialsProvider(encryptionMaterials), clientConfiguration,
cryptoConf);
//NOSEncryptionClient对NOSClient进行了一层封装,使用NOSEncryptionClient与NOSClient方法完全一样,代码可以无缝切换。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, createSampleFile());
client.putObject(putObjectRequest);
NOSObject object = client.getObject(putObjectRequest.getBucketName(), putObjectRequest.getKey());
}
使用非对称RSA加密每次生成的随机密钥的示例(有关相关功能客户端文件加密软件,请参阅Java非对称密钥生成示例)
![]()
public void upload(){
buildAndSaveSymmetricKey();
KeyPair keyPair=loadAsymKeyPair();
EncryptionMaterials encryptionMaterials = new EncryptionMaterials(keyPair);
// 使用AES/GCM模式,并将加密信息存储在文件元信息中.
CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption)
.withStorageMode(CryptoStorageMode.ObjectMetadata);
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setIsSubdomain(true);
client = new NOSEncryptionClient(new StaticCredentialsProvider(credentials),
new StaticEncryptionMaterialsProvider(encryptionMaterials), clientConfiguration,
cryptoConf);
//NOSEncryptionClient对NOSClient进行了一层封装,使用NOSEncryptionClient与NOSClient方法完全一样,代码可以无缝切换。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, createSampleFile());
client.putObject(putObjectRequest);
NOSObject object = client.getObject(putObjectRequest.getBucketName(), putObjectRequest.getKey());
}
相关产品

云端硬盘
高性能,高度可靠的云硬盘服务
文件存储
高度可靠的弹性文件存储
跨地区和运营商的出色网络加速服务
热门搜索
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-193408-1.html
真的好想好想接近你桃子
易烊千玺