Skip to content

Instantly share code, notes, and snippets.

@Naoya9922
Last active September 22, 2022 00:08
Show Gist options
  • Save Naoya9922/86f3970bd9cb1aa98edd353b9d729e38 to your computer and use it in GitHub Desktop.
Save Naoya9922/86f3970bd9cb1aa98edd353b9d729e38 to your computer and use it in GitHub Desktop.
Rails Cookie Decrypt Test
# Run this code in Rails(7 or above) console
class Decryptor
attr_reader :key_generator, :cookie
def initialize(cookie:)
@cookie = CGI::unescape(cookie)
set_key_generator
end
def set_sha1
@key_generator.instance_variable_set(:@hash_digest_class, OpenSSL::Digest::SHA1)
end
def set_sha256
@key_generator.instance_variable_set(:@hash_digest_class, OpenSSL::Digest::SHA256)
end
def decrypt
encrypted_cookie_cipher = config.action_dispatch.encrypted_cookie_cipher || 'aes-256-gcm'
key_len = ActiveSupport::MessageEncryptor.key_len(encrypted_cookie_cipher)
salt = config.action_dispatch.authenticated_encrypted_cookie_salt
secret = @key_generator.generate_key(salt, key_len)
serializer = ActiveSupport::MessageEncryptor::NullSerializer
encryptor = ActiveSupport::MessageEncryptor.new(secret, cipher: encrypted_cookie_cipher, serializer: serializer)
session_key = config.session_options[:key].freeze
encryptor.decrypt_and_verify(@cookie, purpose: "cookie.#{session_key}")
end
private
def set_key_generator
secret_key_base = Rails.application.secret_key_base
@key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: 1000)
end
def config
Rails.application.config
end
end
cookie = "..."
decryptor = Decryptor.new(cookie: cookie)
decryptor.set_sha1 # or decryptor.set_sha256
decryptor.decrypt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment