使用 base64 对 Ruby 哈希进行编码
Encode a Ruby hash using base64
尝试使用 base64 对哈希进行编码,但我无法获得预期的 base64 字符串。
json = {
"v": "2",
"ps": "法国",
"add": "fr.sangyu.tw",
"port": "443",
"id": "ce14d788-0f79-491e-85ca-05240612f28a",
"aid": "233",
"net": "ws",
"type": "none",
"host": "fr.sangyu.tw",
"path": "/",
"tls": "tls"
}
Base64.encode64 JSON.dump(json)
预期字符串:
ew0KICAidiI6ICIyIiwNCiAgInBzIjogIuazleWbvSIsDQogICJhZGQiOiAiZnIuc2FuZ3l1LnR3IiwNCiAgInBvcnQiOiAiNDQzIiwNCiAgImlkIjogImNlMTRkNzg4LTBmNzktNDkxZS04NWNhLTA1MjQwNjEyZjI4YSIsDQogICJhaWQiOiAiMjMzIiwNCiAgIm5ldCI6ICJ3cyIsDQogICJ0eXBlIjogIm5vbmUiLA0KICAiaG9zdCI6ICJmci5zYW5neXUudHciLA0KICAicGF0aCI6ICIvIiwNCiAgInRscyI6ICJ0bHMiDQp9
我的(不正确的)字符串:
eyJ2IjoiMiIsInBzIjoi5rOV5Zu9IiwiYWRkIjoiZnIuc2FuZ3l1LnR3Iiwi cG9ydCI6IjQ0MyIsImlkIjoiY2UxNGQ3ODgtMGY3OS00OTFlLTg1Y2EtMDUy NDA2MTJmMjhhIiwiYWlkIjoiMjMzIiwibmV0Ijoid3MiLCJ0eXBlIjoibm9u ZSIsImhvc3QiOiJmci5zYW5neXUudHciLCJwYXRoIjoiLyIsInRscyI6InRs cyJ9
我看到了问题 How to encode a hash using Ruby Base64 module 但它对我不起作用。
你做对了。有几个原因导致您没有获得预期的输出。
JSON.dump(json)
生成以下内容(无格式):
{"v":"2","ps":"","add":"fr.sangyu.tw","port":"443","id":"ce14d788-0f79-491e-85ca-05240612f28a","aid":"233","net":"ws","type":"none","host":"fr.sangyu.tw","path":"/","tls":"tls"}
您可能想使用 JSON.pretty_generate(json)
产生:
{
"v": "2",
"ps": "",
"add": "fr.sangyu.tw",
"port": "443",
"id": "ce14d788-0f79-491e-85ca-05240612f28a",
"aid": "233",
"net": "ws",
"type": "none",
"host": "fr.sangyu.tw",
"path": "/",
"tls": "tls"
}
最后,我不知道你在哪个 OS 或者你是如何得到你最初预期的 base64
,但它们可能有不同的行尾 \n
和 \r\n
,这可能会导致不同的 base64
.
您可以使用-
Base64.strict_encode64(JSON.pretty_generate(json))
它生成的base64字符串和你期望的不一样
ewogICJ2IjogIjIiLAogICJwcyI6ICLms5Xlm70iLAogICJhZGQiOiAiZnIuc2FuZ3l1LnR3IiwKICAicG9ydCI6ICI0NDMiLAogICJpZCI6ICJjZTE0ZDc4OC0wZjc5LTQ5MWUtODVjYS0wNTI0MDYxMmYyOGEiLAogICJhaWQiOiAiMjMzIiwKICAibmV0IjogIndzIiwKICAidHlwZSI6ICJub25lIiwKICAiaG9zdCI6ICJmci5zYW5neXUudHciLAogICJwYXRoIjogIi8iLAogICJ0bHMiOiAidGxzIgp9
但是生成的内容是一样的
我还尝试在 https://www.base64encode.org/ 中对您的 json 进行编码,这会生成与上述答案相同的字符串。
尝试使用 base64 对哈希进行编码,但我无法获得预期的 base64 字符串。
json = {
"v": "2",
"ps": "法国",
"add": "fr.sangyu.tw",
"port": "443",
"id": "ce14d788-0f79-491e-85ca-05240612f28a",
"aid": "233",
"net": "ws",
"type": "none",
"host": "fr.sangyu.tw",
"path": "/",
"tls": "tls"
}
Base64.encode64 JSON.dump(json)
预期字符串:
ew0KICAidiI6ICIyIiwNCiAgInBzIjogIuazleWbvSIsDQogICJhZGQiOiAiZnIuc2FuZ3l1LnR3IiwNCiAgInBvcnQiOiAiNDQzIiwNCiAgImlkIjogImNlMTRkNzg4LTBmNzktNDkxZS04NWNhLTA1MjQwNjEyZjI4YSIsDQogICJhaWQiOiAiMjMzIiwNCiAgIm5ldCI6ICJ3cyIsDQogICJ0eXBlIjogIm5vbmUiLA0KICAiaG9zdCI6ICJmci5zYW5neXUudHciLA0KICAicGF0aCI6ICIvIiwNCiAgInRscyI6ICJ0bHMiDQp9
我的(不正确的)字符串:
eyJ2IjoiMiIsInBzIjoi5rOV5Zu9IiwiYWRkIjoiZnIuc2FuZ3l1LnR3Iiwi cG9ydCI6IjQ0MyIsImlkIjoiY2UxNGQ3ODgtMGY3OS00OTFlLTg1Y2EtMDUy NDA2MTJmMjhhIiwiYWlkIjoiMjMzIiwibmV0Ijoid3MiLCJ0eXBlIjoibm9u ZSIsImhvc3QiOiJmci5zYW5neXUudHciLCJwYXRoIjoiLyIsInRscyI6InRs cyJ9
我看到了问题 How to encode a hash using Ruby Base64 module 但它对我不起作用。
你做对了。有几个原因导致您没有获得预期的输出。
JSON.dump(json)
生成以下内容(无格式):
{"v":"2","ps":"","add":"fr.sangyu.tw","port":"443","id":"ce14d788-0f79-491e-85ca-05240612f28a","aid":"233","net":"ws","type":"none","host":"fr.sangyu.tw","path":"/","tls":"tls"}
您可能想使用 JSON.pretty_generate(json)
产生:
{
"v": "2",
"ps": "",
"add": "fr.sangyu.tw",
"port": "443",
"id": "ce14d788-0f79-491e-85ca-05240612f28a",
"aid": "233",
"net": "ws",
"type": "none",
"host": "fr.sangyu.tw",
"path": "/",
"tls": "tls"
}
最后,我不知道你在哪个 OS 或者你是如何得到你最初预期的 base64
,但它们可能有不同的行尾 \n
和 \r\n
,这可能会导致不同的 base64
.
您可以使用-
Base64.strict_encode64(JSON.pretty_generate(json))
它生成的base64字符串和你期望的不一样
ewogICJ2IjogIjIiLAogICJwcyI6ICLms5Xlm70iLAogICJhZGQiOiAiZnIuc2FuZ3l1LnR3IiwKICAicG9ydCI6ICI0NDMiLAogICJpZCI6ICJjZTE0ZDc4OC0wZjc5LTQ5MWUtODVjYS0wNTI0MDYxMmYyOGEiLAogICJhaWQiOiAiMjMzIiwKICAibmV0IjogIndzIiwKICAidHlwZSI6ICJub25lIiwKICAiaG9zdCI6ICJmci5zYW5neXUudHciLAogICJwYXRoIjogIi8iLAogICJ0bHMiOiAidGxzIgp9
但是生成的内容是一样的
我还尝试在 https://www.base64encode.org/ 中对您的 json 进行编码,这会生成与上述答案相同的字符串。