1

我的问题可能听起来太明显了,但我是 Amazon KMS 的新手。在阅读了 AWS 上的大量文档后,我了解到如果我直接使用 CMK 进行加密和解密,我可以直接通过创建加密和解密请求来完成。但我不清楚的是,当我生成数据密钥并使用它进行调试时,文档说我需要传递加密的数据密钥来解密 API,我会得到纯文本密钥,我可以用它来调试我的“OWN”上的文本. 我不明白这部分。谁能解释一下,并举一个使用数据密钥解密的小例子。提前致谢

我的示例代码:

public String decrypt(String encryptedTextString) {
    ByteBuffer encryptedText = ByteBuffer.wrap(Base64.getDecoder().decode(encryptedTextString));
    DecryptRequest req=new DecryptRequest().withCiphertextBlob(encryptedText);
    ByteBuffer plainText = client.decrypt(req).getPlaintext();
    return new String(plainText.array());
}

public String encrypt(String plainTextString) {
    ByteBuffer plainText = ByteBuffer.wrap(Base64.getDecoder().decode(plainTextString));
    EncryptRequest req = new EncryptRequest().withKeyId(new String(plainTextKey.array()))
            .withPlaintext(plainText);
    ByteBuffer encryptedText =client.encrypt(req).getCiphertextBlob();
    return new String(encryptedText.array());
}

AWSKMSCryprography() {
    this.setCredential(new ClearCredential());
    this.genrateKey();
}

private void genrateKey() {
    GenerateDataKeyRequest request = new GenerateDataKeyRequest();
    request.setKeyId(keyID);
    request.setKeySpec("AES_128");
    GenerateDataKeyResult dataKeyResult = client.generateDataKey(request);
    plainTextKey = dataKeyResult.getPlaintext();
    encryptedKey = dataKeyResult.getCiphertextBlob();

}
4

1 回答 1

1

我也是使用 KMS 的新手,但是关于使用加密和解密的教程文档在使用加密和解密方法时会产生误导。AWSKMSClient.generateDataKeyAWSKKMSClient.encrypt的 API 文档都指出这encrypt()是针对特定用例的,应该使用不同的模式来使用本地密钥。

可以在dynamodb 加密库中找到更有用的 KMS 示例。另请参阅http://netnix.org/2015/04/19/aes-encryption-with-hmac-integrity-in-java/了解基本加密的一般概述。

于 2015-10-02T03:52:08.733 回答