модуль ActiveSupport::SecurityUtils
Публичные методы класса
# 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. Вызывает исключение в случае несоответствия длин.
# File activesupport/lib/active_support/security_utils.rb, line 26 def secure_compare(a, b) fixed_length_secure_compare(::Digest::SHA256.hexdigest(a), ::Digest::SHA256.hexdigest(b)) && a == b end
Сравнение строк с постоянной временной сложностью для строк переменной длины.
Значения сначала обрабатываются с помощью SHA256, чтобы не раскрывать информацию о длине посредством атак с временной сложностью.
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.