AWS KMS Как использовать функцию расшифровки Java
Мой вопрос может показаться слишком очевидным, но я новичок в 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();
}
1 ответ
Я также новичок в использовании KMS, но учебная документация по использованию шифрования и дешифрования вводит в заблуждение при использовании методов шифрования и дешифрования. Документация по API для AWSKMSClient.generateDataKey и AWSKKMSClient.encrypt указывает на то, что encrypt()
предназначен для конкретных случаев использования, и для использования локального ключа следует использовать другой шаблон.
Более полезный пример KMS можно найти в библиотеке шифрования DynamodB. Также см. http://netnix.org/2015/04/19/aes-encryption-with-hmac-integrity-in-java/ для общего обзора основного шифрования.