数据加密服务 DEW
数据加密服务 DEW
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- API参考
- SDK参考
- 场景代码示例
-
常见问题
-
密钥管理类
- 什么是密钥管理?
- 什么是用户主密钥?
- 什么是默认密钥?
- 自定义密钥与默认密钥有什么区别?
- 什么是数据加密密钥?
- 为什么不能立即删除用户主密钥?
- 哪些云服务使用KMS加密数据?
- 华为云服务如何使用KMS加密数据?
- 信封加密方式有什么优势?
- 在KMS中创建的自定义密钥的个数是否有限制?
- 是否可以从KMS中导出用户主密钥?
- 如果自定义密钥被彻底删除,用户数据是否还可以解密?
- 如何使用在线工具加解密数据?
- 是否可以更新KMS管理的密钥?
- 在什么场景下推荐使用导入的密钥?
- 密钥材料被意外删除时如何处理?
- 默认密钥如何生成?
- 没有权限操作KMS,该如何处理?
- 如何修补OpenSSL以使用-id-aes256-wrap-pad包装非对称密钥?
- 如何修补GmSSL以使用-sms4-wrap-pad包装非对称密钥?
- KMS支持的密钥算法类型
- 请求KMS异常,错误码401,应该如何处理?
- 进行SM2签名时,如何计算SM3摘要?
- 调用encrypt-data接口,返回的密文和明文有什么关系?
- KMS如何保护创建的密钥?
- 如何使用非对称密钥对公钥对签名结果进行验签?
- 外部导入的密钥支持轮转吗?
- 密钥管理服务支持离线加解密数据吗?
- 为什么SM2算法签名结果不是64字节?
- 如何将原始EC私钥转换成PKCS8格式的私钥对象?
- 如何将原始SM2私钥转换成PKCS8格式的私钥对象?
- 凭据管理类
-
密钥对管理类
- 密钥对的配额是多少?
- 如何创建密钥对?
- 什么是私有密钥对和账号密钥对?
- 导入通过PuTTYgen工具创建的密钥对失败如何处理?
- 使用IE9浏览器无法导入密钥对如何处理?
- 如何使用私钥登录Linux弹性云服务器?
- 如何通过私钥获取Windows弹性云服务器的登录密码?
- 绑定密钥对失败如何处理?
- 替换密钥对失败如何处理?
- 重置密钥对失败如何处理?
- 解绑密钥对失败如何处理?
- 替换密钥对后,服务器需要重启吗?
- 关闭弹性云服务器的密码登录方式后如何重新开启?
- 解绑密钥对后用户无法登录ECS时如何处理?
- 私钥不慎遗失怎么办?
- 如何转换私钥文件格式?
- 密钥对在创建主机成功之后可以更改吗?
- 密钥对是否支持多用户共享?
- 如何获取密钥对的私钥或公钥文件?
- 账号密钥首次创建、首次升级时系统报错如何处理?
- 私有密钥对升级账号密钥对后,会占用账号密钥对配额吗?
- 用户联邦身份登录时,私有密钥对升级账号密钥对之后,为什么私有密钥对会不可见?
- 专属加密类
- 计费类
- 通用类
-
密钥管理类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
使用指数退避方法对DEW服务请求错误进行重试
应用场景
当您调用API时,收到返回的错误信息,可参照本文使用指数退避方法对请求错误进行重试。
对接KMS时,必须有重试,包括不限于504、502、500、429等错误码,且推荐重试3~5次。针对502和504错误码,推荐超时时间5~8秒。不建议配置过长超时时间,否则会造成客户侧无法响应。
应用原理
当服务侧出现连续错误响应(如限流错误)时,持续的访问只会导致持续的发生冲突,使用指数退避方法,可以有效的规避该类错误。
约束条件
当前账号下有用于加密的密钥,密钥“状态”为“启用”。
指数退避代码示例
- 请准备基础认证信息:
- ACCESS_KEY: 华为账号Access Key,获取方式请参见获取AK/SK。
- SECRET_ACCESS_KEY: 华为账号Secret Access Key,获取方式请参见获取AK/SK。
- PROJECT_ID: 局点项目ID,获取方式请参见获取项目ID。
- KMS_ENDPOINT: 华为云KMS服务访问终端地址,获取方式请参见终端节点。
- 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
- 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
- 指数退避代码
import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.kms.v2.model.EncryptDataRequest; import com.huaweicloud.sdk.kms.v2.model.EncryptDataRequestBody; import com.huaweicloud.sdk.kms.v2.KmsClient; public class KmsEncryptExample { 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 KMS_ENDPOINT = "xxxx"; private static final String KEY_ID = "xxxx"; private static final String PROJECT_ID = "xxxx"; private static KmsClient KmsClientInit() { ICredential auth = new BasicCredentials() .withAk(ACCESS_KEY) .withSk(SECRET_ACCESS_KEY) .withProjectId(PROJECT_ID); return KmsClient.newBuilder() .withCredential(auth) .withEndpoint(KMS_ENDPOINT) .build(); } public static long getWaitTime(int retryCount) { long initialDelay = 200L; return (long) (Math.pow(2, retryCount) * initialDelay); } public static void encryptData(KmsClient client, String plaintext) { EncryptDataRequest request = new EncryptDataRequest().withBody( new EncryptDataRequestBody() .withKeyId(KEY_ID) .withPlainText(plaintext)); client.encryptData(request); } public static void main(String[] args) { int maxRetryTimes = 6; String plaintext = "plaintext"; String errorMsg = "The throttling threshold has been reached"; KmsClient client = KmsClientInit(); for (int i = 0; i < maxRetryTimes; i++) { try { encryptData(client, plaintext); return; } catch (ClientRequestException e) { if (e.getErrorMsg().contains(errorMsg)) { try { Thread.sleep(getWaitTime(i)); } catch (InterruptedException ex) { throw new RuntimeException(ex); } } } } } }
父主题: 通用