расшифруйте base64 со знаком доллара в ruby 1.8.5
Вопрос
У меня есть строка в кодировке 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.)