我的问题可能听起来太明显,但我是亚马逊KMS的新手。 在AWS上阅读了很多文档后,我明白如果我直接使用CMK进行加密和解密,我可以直接通过创建加密和解密请求来实现。 但我不清楚的是,当我生成数据密钥并使用它进行调试时,文档说我需要传递加密数据密钥来解密API,我将获得纯文本密钥,我可以使用它来调试我的#34上的文本; OWN&#34 ;. 我不明白这一部分。任何人都可以解释这一点,并提供一个使用数据密钥解密的小例子。 提前致谢
我的示例代码:
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();
}
答案 0 :(得分:1)
我也很习惯使用KMS,但使用加密和解密的教程文档使用加密和解密方法会产生误导。 AWSKMSClient.generateDataKey和AWSKKMSClient.encrypt的API文档指出encrypt()
适用于特定用例,并且应使用不同的模式来使用本地密钥。
可以在dynamodb encryption library中找到更有用的KMS示例。另请参阅http://netnix.org/2015/04/19/aes-encryption-with-hmac-integrity-in-java/以获取一般基本加密的概述。