فك شفرة Base64 مع علامة الدولار في روبي 1.8.5
سؤال
لدي سلسلة مشفرة BEAD64 (مع علامات دولارين، لذلك ليست سلسلة Base64 شائعة)
المشكلة: base64.decode64 (أو .unpack ("m")) فك تشفيرها على ما يرام على جهازي المحلي (Ruby 1.8.6)، ولكن مع Ruby 1.8.5 (الإصدار المستخدم بواسطة Heroku) لا يعمل
أيه أفكار ؟
تعديل:
لدي :
لقد نجحت في فك تشفيرها ب "...". فك ("م") محليا ولكن ليس على خادم Heroku (Ruby 1.8.5، ربما إصدار Ruby غير المشكلة)
المحلول
علامة الدولار ليست جزءا من مواصفات Base64.
ببساطة تجريد الرائدة $$
قبل تفريغ:
str.sub(/^\$*/, '').unpack('m')
لتجريد جميع الأحرف غير الأساسية 64، محاكاة سلوك جديد (Ruby 1.8.6)،
str.gsub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/]/, '').unpack('m')
سوف Ruby 1.8.6 تجاهل جميع رموز غير Base64 (بما في ذلك $
) داخل السلسلة إلى فك التشفير، في حين أن 1.8.5 سيتوقف عن المعالجة في أول شخصية من هذا القبيل (انظر pack.c
في مصدر روبي.)