Ручное шифрование и расшифровка файлов cookie — Rails

#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' вместо фактического секретного ключа приложения.