Модуль Base64
Модуль Base64 предоставляет функции кодирования (#encode64, strict_encode64, urlsafe_encode64) и декодирования (#decode64, strict_decode64, urlsafe_decode64) двоичных данных с использованием представления Base64.
Пример
Простой пример кодирования и декодирования.
require "base64"
enc = Base64.encode64('Send reinforcements')
# -> "U2VuZCByZWluZm9yY2VtZW50cw==\n"
plain = Base64.decode64(enc)
# -> "Send reinforcements"
Использование base64 для кодирования данных позволяет преобразовать любые двоичные данные в набор печатных символов.
Общедоступные методы экземпляра
# File lib/base64.rb, line 58
def decode64(str)
str.unpack("m").first
end Возвращает декодированную версию данных в формате Base64 из str. Этот метод соответствует RFC 2045. Символы, не входящие в базовый алфавит, игнорируются.
require 'base64'
str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' +
'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' +
'ZSB0aHJlZQpBbmQgc28gb24uLi4K'
puts Base64.decode64(str)
Возвращает:
This is line one This is line two This is line three And so on...
# File lib/base64.rb, line 38
def encode64(bin)
[bin].pack("m")
end Возвращает закодированную версию данных в формате Base64 из bin. Этот метод соответствует RFC 2045. Каждые 60 закодированных символов дополняются новой строкой.
require 'base64'
Base64.encode64("Now is the time for all good coders\nto learn Ruby")
Возвращает:
Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g UnVieQ==
# File lib/base64.rb, line 73
def strict_decode64(str)
str.unpack("m0").first
end Возвращает декодированную версию данных в формате Base64 из str. Этот метод соответствует RFC 4648. Если данные содержат неправильное количество заполнителей или некорректные символы, генерируется исключение ArgumentError. Обратите внимание, что CR и LF также отклоняются.
# File lib/base64.rb, line 65
def strict_encode64(bin)
[bin].pack("m0")
end Возвращает закодированную версию данных в формате Base64 из bin. Этот метод соответствует RFC 4648. Новые строки не добавляются.
# File lib/base64.rb, line 97
def urlsafe_decode64(str)
# NOTE: RFC 4648 does say nothing about unpadded input, but says that
# "the excess pad characters MAY also be ignored", so it is inferred that
# unpadded input is also acceptable.
str = str.tr("-_", "+/")
if !str.end_with?("=") && str.length % 4 != 0
str = str.ljust((str.length + 3) & ~3, "=")
end
strict_decode64(str)
end Возвращает декодированную версию данных в формате Base64 из str. Этот метод соответствует спецификации "Base 64 Кодирование с безопасными для URL и имен файлов символами" в RFC 4648. В алфавите используется '-' вместо '+' и '_' вместо '/'.
Символ заполнения необязателен. Метод принимает данные как с корректным, так и без заполнителя. Заметим, что неправильно заполненные данные все равно отклоняются.
# File lib/base64.rb, line 83
def urlsafe_encode64(bin, padding: true)
str = strict_encode64(bin).tr("+/", "-_")
str = str.delete("=") unless padding
str
end Возвращает закодированную версию данных в формате Base64 из bin. Этот метод соответствует спецификации "Base 64 Кодирование с безопасными для URL и имен файлов символами" в RFC 4648. В алфавите используется '-' вместо '+' и '_' вместо '/'. Заметим, что результат все еще может содержать '='. Вы можете отключить заполнение, установив padding в значение false.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.