Rails 4:如何解密rails 4会话cookie(给定会话密钥和秘密)
在Rails 3中,会话cookie可以使用base64解码轻松解码,但在Rails 4中,cookie被编码和加密。
我想知道如何读取编码和加密的rails 4 cookie(假设我们知道密钥库)。
谢谢,
Rails 4使用AES-256根据您应用的secret_token_base
使用密钥加密Cookie。
以下是解密会话cookie的一般方案:
- 计算你的密钥
- Base 64解码cookie值
- 将解码后的cookie值拆分为“ – ”,这将产生两部分,第一部分是加密数据,第二部分是加密方案使用的初始化向量。 Base 64独立地解码每个部分。
- 通过对密钥和初始化向量应用AES解密来解密加密数据。
我找不到一个可以轻松解密消息的网站(建议是受欢迎的),以编程方式可以这样做:
secret = OpenSSL::PKCS5.pbkdf2_hmac_sha1(app_secret_token, 'encrypted cookie', 1000, 64) encrypted_message = Base64.decode64(cookie_str) cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc') encrypted_data, iv = encrypted_message.split("--").map {|v| ::Base64.strict_decode64(v)} cipher.decrypt cipher.key = secret cipher.iv = iv decrypted_data = cipher.update(encrypted_data) decrypted_data << cipher.final Marshal.load(decrypted_data)
几个笔记:
-
此代码段几乎与
ActiveSupport::MessageEncryptor
的实际_decript
方法实现相同,后者由ActionDispatch::Cookies
middelware使用。 -
从ActionDispatch :: Session :: CookieJar开始,这就是Rails 4所特有的:
如果您只设置了secret_token ,则您的cookie将被签名,但不会加密 。 这意味着用户无法在不知道应用的密钥的情况下更改他们的+ user_id +,但可以轻松阅读他们的+ user_id +。 这是Rails 3应用程序的默认设置。
如果您设置了secret_key_base ,则您的cookie将被加密 。 这比签名cookie更进一步,因为加密的cookie不能被用户更改或读取。 这是Rails 4中的默认开头。