Похоже, что аргумент ciphertext_blob
в Aws::KMS::Client#decrypt
ожидает двоичную строку , которая включает зашифрованный зашифрованный текст, который вы хотите расшифровать .
В вашем примере вы передаете незашифрованную строку в кодировке Base64 в decrypt
. Вместо этого вам нужно передать зашифрованную двоичную строку .
Чтобы получить зашифрованную строку, мы можем вызвать Aws::KMS::Client#encrypt
с вашим keyId (также известным как ARN) и строкой, которую вы хотите зашифровать в виде открытого текста.
В ответе на этот вызов мы получаем ciphertext_blob
, который является зашифрованной двоичной строкой, которую нам нужно использовать для декодирования.
Иногда вы можете увидеть, что двоичные данные «распакованы», что вы можете продемонстрировать, выполнив ciphertext_blob.unpack('H*')
. Если вы распаковали данные и хотите расшифровать их, вам нужно их упаковать: encrypted_upacked_blob.pack('H*')
.
Вот полный пример двустороннего кодирования и декодирования строки открытого текста:
require 'aws-sdk-kms'
client = Aws::KMS::Client.new
key_id = 'arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
plaintext_to_encrypt = 'blablabla'
encrypt_response = client.encrypt({
key_id: key_id,
plaintext: plaintext_to_encrypt,
})
encrypt_response.ciphertext_blob
# => "\x01\x02\x02\x00xt/Jyu\x85B\xCA\x16v\xDAa3DM1$\e8Y\xF9\x812\x1E\xA9\xD3\xE3R\x1E/}\xCA\x...
encrypted_upacked_blob = encrypt_response.ciphertext_blob.unpack('H*')
# => ["0102020078742f4a79758542ca1676da6133444d31241b3859f981321ea9d3e3521e2f7dca01a7f89f2ee03...
encrypted_packed_blob = encrypted_upacked_blob.pack('H*')
# => "\x01\x02\x02\x00xt/Jyu\x85B\xCA\x16v\xDAa3DM1$\e8Y\xF9\x812\x1E\xA9\xD3\xE3R\x1E/}\xCA\x...
decrypt_response = client.decrypt({
ciphertext_blob: encrypted_packed_blob
})
decrypted_plaintext = decrypt_response.plaintext
# => "blablabla"
Этот пример объединяет два примера, предоставленных AWS: Шифрование данных в AWS KMS с использованием Ruby SDK и Дешифрование BLOB-объектов данных в AWS KMS .
Чтобы лучше понять, что делает [blob].pack("H*")
, прочитайте этот пост StackOverflow и документацию Руби Array#pack
.