ruby - 如何使用 Ruby Base64 模块对哈希进行编码

标签 ruby amazon-s3 base64 aws-api-gateway

我正在尝试对哈希进行编码,我希望它返回一些我知道的值。这是我编写的用于编码的 ruby​​ 脚本。

policy = {
 "expiration": "2015-12-30T12:00:00.000Z",
 "conditions": [
   {"bucket": "sigv4examplebucket"},
   ["starts-with", "$key", "user/user1/"],
   {"acl": "public-read"},
   {"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"},
   ["starts-with", "$Content-Type", "image/"],
   {"x-amz-meta-uuid": "14365123651274"},
   {"x-amz-server-side-encryption": "AES256"},
   ["starts-with", "$x-amz-meta-tag", ""],
   {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"},
   {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
   {"x-amz-date": "20151229T000000Z" }
 ]
}.to_s

enc = Base64.encode64(policy)

预期的编码值:

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9

但是我的 ruby​​ 脚本正在返回:

ezpleHBpcmF0aW9uPT4iMjAxNS0xMi0zMFQxMjowMDowMC4wMDBaIiwgOmNvbmRpdGlvbnM9Plt7OmJ1Y2tldD0+InNpZ3Y0ZXhhbXBsZWJ1Y2tldCJ9LCBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwgezphY2w9PiJwdWJsaWMtcmVhZCJ9LCB7OnN1Y2Nlc3NfYWN0aW9uX3JlZGlyZWN0PT4iaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwgWyJzdGFydHMtd2l0aCIsICIkQ29udGVudC1UeXBlIiwgImltYWdlLyJdLCB7OiJ4LWFtei1tZXRhLXV1aWQiPT4iMTQzNjUxMjM2NTEyNzQifSwgezoieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiI9PiJBRVMyNTYifSwgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sIHs6IngtYW16LWNyZWRlbnRpYWwiPT4iQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LCB7OiJ4LWFtei1hbGdvcml0aG0iPT4iQVdTNC1ITUFDLVNIQTI1NiJ9LCB7OiJ4LWFtei1kYXRlIj0+IjIwMTUxMjI5VDAwMDAwMFoifV19

当我使用 https://www.base64encode.org/ 时,它返回的正是预期的结果。我从 http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 中获取了预期值

我做的对吗?

最佳答案

您期待一个漂亮的 JSON 字符串,但您得到的是一个 Ruby 哈希。这更接近你想要的:

Base64.encode64(JSON.dump(policy))

它不完全一样,不是一个字节接一个字节,但应该可以完成工作。

如果您需要获得完全相同的输出,您将不得不考虑 JSON 格式,即使 JSON 在数据方面是相同的。

关于ruby - 如何使用 Ruby Base64 模块对哈希进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36724958/

相关文章:

ruby - 带有 sinatra 的 Heroku 没有 RAILS_ROOT 或 Rail.root

ruby - 是否可以将数据分段到不同的 Redis 存储中,并在需要时加载到内存中?

amazon-web-services - 无服务器:部署错误 S3 存储桶已存在于堆栈中

hadoop - Gobblin Map-reduce作业在EMR上成功运行,但在s3中无输出

ruby - 删除关联中的 default_scope

ruby - 来自 created_at 的不同天数的 ActiveRecord 计数?

go - 在 Golang 中写入/附加到 S3 存储桶

javascript - 转换数据:image/png;base64 into an image type in database

php - 如何在不损失质量和大小的情况下对base64图像进行解码和编码

javascript - pdfmake base64 图片回调