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

在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)

  • 问题内容: 我想知道是否已经有一个库可以以编程方式编写Java类或方法? 我正在寻找能够将新的源代码写入现有文件或扩展已经存在的文件的库。 问题答案: 查看Eclipse JDT。 Eclipse Java开发工具(JDT)提供用于访问和操作Java源代码的API。它允许访问工作空间中的现有项目,创建新项目以及修改和读取现有项目。 更具体地说,您可以使用Java Model API创建新的Java

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