Модуль 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.unpack1("m")
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.unpack1("m0")
end Возвращает декодированное из Base64 представление str. Этот метод соответствует RFC 4648. ArgumentError генерируется, если str некорректно дополнено или содержит символы, не являющиеся частью алфавита. Обратите внимание, что 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 98
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.
if !str.end_with?("=") && str.length % 4 != 0
str = str.ljust((str.length + 3) & ~3, "=")
str.tr!("-_", "+/")
else
str = str.tr("-_", "+/")
end
strict_decode64(str)
end Возвращает декодированное из Base64 представление str. Этот метод соответствует спецификации «Base 64 Encoding с безопасным для URL и имён файлов алфавитом» в RFC 4648. В алфавите используется «-» вместо «+» и «_» вместо «/».
Символ заполнения необязателен. Этот метод принимает как правильно дополненные, так и неполные данные на входе. Обратите внимание, что он по-прежнему отклоняет некорректно дополненные данные.
# File lib/base64.rb, line 83
def urlsafe_encode64(bin, padding: true)
str = strict_encode64(bin)
str.chomp!("==") or str.chomp!("=") unless padding
str.tr!("+/", "-_")
str
end Возвращает закодированное в Base64 представление bin. Этот метод соответствует спецификации «Base 64 Encoding с безопасным для URL и имён файлов алфавитом» в RFC 4648. В алфавите используется «-» вместо «+» и «_» вместо «/». Обратите внимание, что результат может всё ещё содержать «=». Вы можете удалить заполнение, установив padding в false.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.