#ruby-on-rails #encryption
Вопрос:
Я новичок в rails и пытаюсь зашифровать и расшифровать файл cookie вручную. Кто-нибудь может сказать мне, где я ошибаюсь?
Приведенный ниже код вызывает эту ошибку ActiveSupport::MessageVerifier::InvalidSignature
require 'cgi'
require 'json'
require 'active_support'
def verify_and_decrypt_session_cookie(cookie, secret_key_base)
cookie = CGI::unescape(cookie)
salt = 'encrypted cookie'
signed_salt = 'signed encrypted cookie'
key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: 1000)
secret = key_generator.generate_key(salt)[0, ActiveSupport::MessageEncryptor.key_len]
sign_secret = key_generator.generate_key(signed_salt)
encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret, serializer: JSON)
encryptor.decrypt_and_verify(cookie)
end
cookie = 'example123'
secret = 'Rails.application.secret_key_base'
p verify_and_decrypt_session_cookie(cookie, secret)
Спасибо
Комментарии:
1. С какой целью? Есть гораздо более простые способы сделать это. api.rubyonrails.org/v6.1/classes/ActionDispatch/Cookies.html
2. @max это часть урока, которому я следую, я думаю, что цель состоит в том, чтобы показать, как безопасно обрабатываются и хранятся сеансы. Спасибо за ссылку, я ее проверю. Поделился своим кодом, чтобы проверить, не пропущено ли что-нибудь очевидное / фундаментальное.
3. Справедливо — одна из вопиющих проблем с этим кодом заключается в том, что вы используете строковый литерал
'Rails.application.secret_key_base'
вместо фактического секретного ключа приложения.