Spec-Zone.ru › Ruby on Rails 6.0

модуль ActiveSupport::SecurityUtils

Публичные методы класса

fixed_length_secure_compare(a, b) Показать исходный код
# File activesupport/lib/active_support/security_utils.rb, line 11
def fixed_length_secure_compare(a, b)
  raise ArgumentError, "string length mismatch." unless a.bytesize == b.bytesize

  l = a.unpack "C#{a.bytesize}"

  res = 0
  b.each_byte { |byte| res |= byte ^ l.shift }
  res == 0
end

Сравнение строк с постоянной временной сложностью для строк фиксированной длины.

Сравниваемые значения должны иметь фиксированную длину, например, строки, уже обработанные с помощью HMAC. В случае несовпадения длин выбрасывается исключение.

secure_compare(a, b) Показать исходный код
# File activesupport/lib/active_support/security_utils.rb, line 26
def secure_compare(a, b)
  fixed_length_secure_compare(::Digest::SHA256.digest(a), ::Digest::SHA256.digest(b)) && a == b
end

Сравнение строк с постоянной временной сложностью для строк переменной длины.

Значения сначала обрабатываются с помощью SHA256, чтобы не раскрывать информацию о длине посредством атак на время выполнения.

© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API