расшифруйте base64 со знаком доллара в ruby 1.8.5

StackOverflow https://stackoverflow.com/questions/598280

  •  11-09-2019
  •  | 
  •  

Вопрос

У меня есть строка в кодировке base64 (с двумя знаками доллара, так что это не обычная строка base64)

Проблема:Base64.decode64 (или .unpack ("m")) отлично декодирует его на моем локальном компьютере (ruby 1.8.6), но с ruby 1.8.5 (версией, используемой Heroku) это не работает

Есть какие - нибудь идеи ?

Редактировать:

У меня есть :

$$YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MIO3M6OTOIX3BSYXL0AW1LIJTZOJUJ6IJGZMJAWIJTZOJG6IL9UZXH0AWRZIJTZOJEZNDOIMJC1ODE0MDYSMJC0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30=

Я успешно расшифровал его с помощью '...'.распакуйте ("m") локально, но не на сервере heroku (ruby 1.8.5, возможно, в версии ruby проблема не в этом)

Это было полезно?

Решение

Знак доллара не является частью спецификации Base64.

Просто разденьте ведущую $$ перед распаковкой:

str.sub(/^\$*/, '').unpack('m')

Удалить все символы, отличные от Base64, эмулируя новое поведение (Ruby 1.8.6),

str.gsub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/]/, '').unpack('m')

Ruby 1.8.6 будет игнорировать все символы, отличные от Base64 (включая $) внутри строки для декодирования, тогда как 1.8.5 остановит обработку при первом таком символе (см. pack.c в исходном коде Ruby.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top