当前位置: 首页 > 知识库问答 >
问题:

在Java中以编程方式使用AWS KMS解密cypherTextBlob?InvalidCipherTextException

郎华皓
2023-03-14

我是一个有点新的密码学,从来没有使用AWS KMS加密数据之前。我使用AWS SDK for Java for KMS。但是,在尝试使用AWS KMS API操作进行加密和解密时,我面临异常InvalidCiphertextException

<dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>kms</artifactId>
      <version>2.15.19</version>
  </dependency>
String encrypt(String plainText){
EncryptRequest encryptRequest = new EncryptRequest().withKeyId(keyId).withPlaintext(plainText);

//calling encrypt function here 
EncryptResult response = kmsClient.encrypt(encryptRequest);
cipherText =  new String(response.getCiphertextBlob().array());
//calling decrypt function here
return decrypt(cipherText);
}
public String decrypt(String cipherText){
ByteBuffer cyphertextBlob = ByteBuffer.wrap(cipherText.getBytes());

//Point 1: Exception is thrown at this point while calling decrypt operation API.

DecryptRequest request = new DecryptRequest().withKeyId(keyId).withCiphertextBlob(cyphertextBlob);
}

问题是我在调用api时出现了以下错误(第1点)

com.amazonaws.services.kms.model.InvalidCipherTextException:null(服务:AWSKMS;状态代码:400;错误代码:InvalidCipherTextException;请求ID:45720B33-3637-490A-8C6A-D7491CCADF94;代理:null)

InvalidCipherTextException.在阅读AWS文档时,以下是我理解的要点,

    null

有谁能帮忙吗?

共有1个答案

壤驷兴朝
2023-03-14

只是为了更新这里,以防有人得到这个问题的股票。

调试时发现,使用KMS响应的get方法得到的ByteBuffer对象的容量和限制与decrypt方法中的密文创建ByteBuffer对象时的默认容量和限制不同。所以这导致了异常。

 类似资料:
  • 问题内容: 我已经搜索了其他问题,但是似乎仍然无法在swift 3中使用自动布局以编程方式创建我的scrollView。我可以使我的scrollview出现,如下图所示,但是当我滚动到底部时,其他标签可以显示不会显示,并且“滚动顶部”标签不会消失。 希望有人可以帮助您在下面查看我的代码! 问题答案: 使用约束定义滚动内容大小很容易-因此您不必进行任何手动计算。 只记得: 滚动视图的 内容元素 必须

  • 使用 lavas init 创建的模板项目中,在以下场景下都会以编程方式使用 Lavas: server.dev.js 开发环境下的 SPA/SSR 模式。 server.prod.js 生产环境下的 SSR 模式。 可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助: 如何选择

  • 问题内容: 我将Wicket与Wicket Auth Project一起用于表示层,因此将其与Spring Security集成在一起。这是Wicket调用的身份验证方法: 我的Spring Security XML配置的内容(里面)是: 2.3.6节。参考文档的会话固定攻击防护说: 会话固定攻击是一种潜在的风险,恶意攻击者有可能通过访问站点来创建会话,然后诱使另一个用户以相同的会话登录(通过向他

  • 我是飞航的新手。飞行路线很好,很友好。 我想在V1__Initial_structure.sql文件中为我的表创建并给出架构名称。我不知道在哪里为占位符赋值。我已经以编程方式配置了Flyway。我的sql文件包含, 创建架构 ${schemaName} 创建表${SchemaName}. brand(brand_codeID,brand_namevarchar(50)唯一不为空,活动char(1)

  • 问题内容: 我正在尝试编写一个可以自动登录Facebook的Java程序。 到目前为止,我已经获得了下面的代码,可以将主页html页面下载到String中,但是不知道如何发送电子邮件和密码来登录Facebook?Java程序还需要处理返回的Cookie才能保持登录状态吗? } 更新: 我已经使用htmlUnit尝试了以下代码,但是出现以下异常: 有人知道为什么吗? 问题答案: 您应该看一下HTML

  • 我正试图弄清楚如何使用ANTLR,但我很难消化我所发现的东西。到目前为止,以下是我的资源: 如何使用ANTLR4创建AST? 如何使用Gradle 2.10将一个ANTLR lexer语法导入到另一个语法中? https://github.com/antlr/grammars-v4/tree/master/java8 https://dzone.com/articles/parsing-any-l