我在无服务器的框架字上使用无服务器-kms-秘密来设置一些我想使用Ruby使用的ENV变量。
我可以确认插件工作得很好,它用加密变量生成文件,我可以在AWS的环境中看到加密的变量。问题是我无法在Ruby中解密它。插件中解密它(正确)的代码是这里,我知道它获取保存在文件中的字符串,并使用Base64对其进行编码,所以没什么大不了的。在Ruby中:
token = "blablabla"
client = Aws::KMS::Client.new(region: 'us-east-1')
blob = Base64.encode64(token)
client.decrypt({ciphertext_blob: blob})
....
Aws::KMS::Errors::InvalidCiphertextException ()客户端应该自动获得我的凭据,但我不确定我是否理解keyArn是如何使用的,虽然看起来与此无关。
有人知道怎么解决这个问题吗?
发布于 2019-04-01 16:58:55
我没有对字符串进行编码,而是对其进行解码。
token = "blablabla"
client = Aws::KMS::Client.new(region: 'us-east-1')
blob = Base64.decode64(token)
client.decrypt({ciphertext_blob: blob})发布于 2019-03-16 10:01:03
它看起来像ciphertext_blob参数在Aws::KMS::Client#decrypt 期望一个二进制字符串中包含了要解密的加密密文。
在您的示例中,您将一个未加密的Base64编码字符串传入decrypt。相反,您需要传递一个加密的二进制字符串。
要获得加密的字符串,我们可以使用您的Aws::KMS::Client#encrypt (也称为ARN)和您想要以明文加密的字符串调用keyId。
在该调用的响应中,我们得到一个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提供的两个例子:用Ruby加密AWS KMS中的数据和用AWS KMS解密数据块。
要更好地理解[blob].pack("H*")正在做什么,请查看这个StackOverflow帖子和Ruby的Array#pack文档。
https://stackoverflow.com/questions/55168878
复制相似问题