Модуль 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 57
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 37
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 72
def strict_decode64(str)
str.unpack1("m0")
end Возвращает декодированную версию данных в формате Base64 из str. Этот метод соответствует RFC 4648. ArgumentError генерируется, если str некорректно дополняется или содержит неалфавитные символы. Обратите внимание, что CR или LF также отклоняются.
# File lib/base64.rb, line 64
def strict_encode64(bin)
[bin].pack("m0")
end Возвращает закодированную версию данных в формате Base64 из bin. Этот метод соответствует RFC 4648. Символы перевода строки не добавляются.
# File lib/base64.rb, line 96
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 82
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.