当 secret_key_base 为零时手动解密 Rails 5 会话?

Decrypting Rails 5 session manually when secret_key_base is nil?

我正在关注其他几个关于如何手动解密会话字符串的 SO 线程...

cookie        = CGI::unescape(params[:session])
salt          = Rails.application.config.action_dispatch.encrypted_cookie_salt
signed_salt   = Rails.application.config.action_dispatch.encrypted_signed_cookie_salt
key_generator = ActiveSupport::KeyGenerator.new(Rails.application.secrets.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)

decrypted_session = encryptor.decrypt_and_verify(cookie)

问题是,在 Rails 5.2 中,secret_key_base 为 nil,这会导致该步骤失败。我尝试了一个空的 '' 字符串,但也失败了。

我没有使用新的master_key方法,我仍然选择使用secret_key_base

对于任何试图在 rails 5.2 中获取秘密密钥库的人,我遇到了同样的问题,经过一些研究后我使用了 Rails.application.secret_key_base。这是一个 github 代码,显示了解密是如何完成的。 https://gist.github.com/inopinatus/e523f36b468f94cf6d34410b73fef15e