Кодировать Ruby га sh, используя base64 - PullRequest
0 голосов
/ 05 апреля 2020

Попытка кодировать ха sh с использованием 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

Я видел вопрос Как кодировать га sh, используя Ruby Base64 модуль , но это не так не работает для меня.

Ответы [ 2 ]

3 голосов
/ 05 апреля 2020

Вы делаете это правильно. Есть несколько причин, по которым вы не получаете ожидаемый результат.

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"
}

Наконец, я не знаю, на какой ОС вы работаете или как вы ожидали исходное значение base64, но они могут иметь разные окончания строки \n против \r\n, что может вызвать разные base64.

0 голосов
/ 05 апреля 2020

Вы можете использовать -

Base64.strict_encode64(JSON.pretty_generate(json))

Строка base64, которую она генерирует, отличается от ожидаемой

ewogICJ2IjogIjIiLAogICJwcyI6ICLms5Xlm70iLAogICJhZGQiOiAiZnIuc2FuZ3l1LnR3IiwKICAicG9ydCI6ICI0NDMiLAogICJpZCI6ICJjZTE0ZDc4OC0wZjc5LTQ5MWUtODVjYS0wNTI0MDYxMmYyOGEiLAogICJhaWQiOiAiMjMzIiwKICAibmV0IjogIndzIiwKICAidHlwZSI6ICJub25lIiwKICAiaG9zdCI6ICJmci5zYW5neXUudHciLAogICJwYXRoIjogIi8iLAogICJ0bHMiOiAidGxzIgp9

Но генерируемый ею контент такой же.

Также я попытался закодировать ваш json в https://www.base64encode.org/, который генерирует ту же строку, что упоминалась выше в этом ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...