数据加密服务 DEW
数据加密服务 DEW
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- API参考
- SDK参考
-
常见问题
-
密钥管理类
- 什么是密钥管理?
- 什么是用户主密钥?
- 什么是默认密钥?
- 自定义密钥与默认密钥有什么区别?
- 什么是数据加密密钥?
- 为什么不能立即删除用户主密钥?
- 哪些云服务使用KMS加密数据?
- 华为云服务如何使用KMS加密数据?
- 信封加密方式有什么优势?
- 在KMS中创建的自定义密钥的个数是否有限制?
- 是否可以从KMS中导出用户主密钥?
- 如果自定义密钥被彻底删除,用户数据是否还可以解密?
- 如何使用在线工具加解密数据?
- 是否可以更新KMS管理的密钥?
- 在什么场景下推荐使用导入的密钥?
- 密钥材料被意外删除时如何处理?
- 默认密钥如何生成?
- 没有权限操作KMS,该如何处理?
- 如何修补OpenSSL以使用-id-aes256-wrap-pad包装非对称密钥?
- KMS支持的密钥算法类型
- 请求KMS异常,错误码401,应该如何处理?
- 调用encrypt-data接口,返回的密文和明文有什么关系?
- KMS如何保护创建的密钥?
- 如何使用非对称密钥对公钥对签名结果进行验签?
- 外部导入的密钥支持轮转吗?
- 密钥管理服务支持离线加解密数据吗?
- 如何将原始EC私钥转换成PKCS8格式的私钥对象?
- 凭据管理类
-
密钥对管理类
- 如何创建密钥对?
- 什么是私有密钥对和账号密钥对?
- 导入通过PuTTYgen工具创建的密钥对失败如何处理?
- 使用IE9浏览器无法导入密钥对如何处理?
- 如何使用私钥登录Linux弹性云服务器?
- 如何通过私钥获取Windows弹性云服务器的登录密码?
- 绑定密钥对失败如何处理?
- 替换密钥对失败如何处理?
- 重置密钥对失败如何处理?
- 解绑密钥对失败如何处理?
- 替换密钥对后,服务器需要重启吗?
- 关闭弹性云服务器的密码登录方式后如何重新开启?
- 解绑密钥对后用户无法登录ECS时如何处理?
- 私钥不慎遗失怎么办?
- 如何转换私钥文件格式?
- 密钥对在创建主机成功之后可以更改吗?
- 密钥对是否支持多用户共享?
- 如何获取密钥对的私钥或公钥文件?
- 账号密钥首次创建、首次升级时系统报错如何处理?
- 私有密钥对升级账号密钥对后,会占用账号密钥对配额吗?
- 用户联邦身份登录时,私有密钥对升级账号密钥对之后,为什么私有密钥对会不可见?
- 专属加密类
- 计费类
- 通用类
-
密钥管理类
- 视频帮助
-
更多文档
- 用户指南(阿布扎比区域)
-
用户指南(吉隆坡区域)
- 产品介绍
- 用户指南
-
常见问题
-
密钥管理类
- 什么是密钥管理?
- 什么是用户主密钥?
- 什么是默认密钥?
- 自定义密钥与默认密钥有什么区别?
- 什么是数据加密密钥?
- 为什么不能立即删除用户主密钥?
- 哪些云服务使用KMS加密数据?
- 云服务如何使用KMS加密数据?
- 信封加密方式有什么优势?
- 在KMS中创建的自定义密钥的个数是否有限制?
- 是否可以从KMS中导出用户主密钥?
- 如果自定义密钥被彻底删除,用户数据是否还可以解密?
- 如何使用在线工具加解密数据?
- 是否可以更新KMS管理的密钥?
- 在什么场景下推荐使用导入的密钥?
- 可以导入哪些类型的密钥?
- 密钥材料被意外删除时如何处理?
- 默认密钥如何生成?
- 没有权限操作KMS,该如何处理?
- 如何修补OpenSSL以使用-id-aes256-wrap-pad包装非对称密钥?
- KMS支持的密钥算法类型
- 请求KMS异常,错误码401,应该如何处理?
- 调用encrypt-data接口,返回的密文和明文有什么关系?
- KMS如何保护创建的密钥?
- 凭据管理类
-
密钥管理类
- 修订记录
- API参考(阿布扎比区域)
- API参考(吉隆坡区域)
- 通用参考
链接复制成功!
使用加密SDK进行本地文件加解密
文件加密,指通过指定算法对文本信息进行加密,使其无法被窃取或修改。
加密SDK(Encryption SDK)是一个客户端密码库,提供了数据的加解密、文件流加解密等功能,旨在帮助客户专注于应用程序的核心功能,而不用关心数据加密和解密的实现过程,用户只需调用加解密接口即可轻松实现海量数据加解密。
应用场景
对大型文件、图片等数据通过HTTPS请求到KMS服务进行保护时会消耗大量网络资源,降低加密效率。
解决方案
加密SDK通过文件流分段信封加密的原理进行加密。
数据加密通过KMS生成的数据密钥在SDK内部进行,内存中分段加解密文件无需将数据通过网络传输后再进行加解密,保证了文件加密的安全性和正确性。
对于大型文件,SDK执行加密过程中,将文件分段读取到内存中,通过加解密写到目标文件后再进行下一段文件读取和加解密,直至完成整个文件的加解密。
操作流程
操作步骤
- 获取AK/SK:
- 获取region相关信息。
- 文件加解密。
public class KmsEncryptFileExample { private static final String ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_AK"); private static final String SECRET_ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_SK"); private static final String PROJECT_ID = "<projectId>"; private static final String REGION = "<region>"; private static final String KEYID = "<keyId>"; public static final String ENDPOINT = "<endpoint>"; public static void main(String[] args) throws IOException { // 源文件路径 String encryptFileInPutPath = args[0]; // 加密后密文文件路径 String encryptFileOutPutPath = args[1]; // 解密后文件路径 String decryptFileOutPutPath = args[2]; // 加密上下文 Map<String, String> encryptContextMap = new HashMap<>(); encryptContextMap.put("encryption", "context"); encryptContextMap.put("simple", "test"); encryptContextMap.put("caching", "encrypt"); // 构建加密配置 HuaweiConfig config = HuaweiConfig.builder().buildSk(SECRET_ACCESS_KEY) .buildAk(ACCESS_KEY) .buildKmsConfig(Collections.singletonList(new KMSConfig(REGION, KEYID, PROJECT_ID, ENDPOINT))) .buildCryptoAlgorithm(CryptoAlgorithm.AES_256_GCM_NOPADDING) .build(); HuaweiCrypto huaweiCrypto = new HuaweiCrypto(config); // 设置密钥环 huaweiCrypto.withKeyring(new KmsKeyringFactory().getKeyring(KeyringTypeEnum.KMS_MULTI_REGION.getType())); // 加密文件 encryptFile(encryptContextMap, huaweiCrypto, encryptFileInPutPath, encryptFileOutPutPath); // 解密文件 decryptFile(huaweiCrypto, encryptFileOutPutPath, decryptFileOutPutPath); } private static void encryptFile(Map<String, String> encryptContextMap, HuaweiCrypto huaweiCrypto, String encryptFileInPutPath, String encryptFileOutPutPath) throws IOException { // fileInputStream 加密后文件对应的输入流 FileInputStream fileInputStream = new FileInputStream(encryptFileInPutPath); // fileOutputStream 源文件对应的输出流 FileOutputStream fileOutputStream = new FileOutputStream(encryptFileOutPutPath); // 加密 huaweiCrypto.encrypt(fileInputStream, fileOutputStream, encryptContextMap); fileInputStream.close(); fileOutputStream.close(); } private static void decryptFile(HuaweiCrypto huaweiCrypto, String decryptFileInPutPath, String decryptFileOutPutPath) throws IOException { // in 源文件对应的输入流 FileInputStream fileInputStream = new FileInputStream(decryptFileInPutPath); // out 加密后文件对应的输出流 FileOutputStream fileOutputStream = new FileOutputStream(decryptFileOutPutPath); // 解密 huaweiCrypto.decrypt(fileInputStream, fileOutputStream); fileInputStream.close(); fileOutputStream.close(); } }
父主题: 密钥管理