![](/img/trans.png)
[英]Given the session key and secret, how can we decrypt Rails cookies?
[英]Rails 4: How to decrypt rails 4 session cookie (Given the session key and secret)
在Rails 3中,會話cookie可以使用base64解碼輕松解碼,但在Rails 4中,cookie被編碼和加密。
我想知道如何讀取編碼和加密的rails 4 cookie(假設我們知道密鑰庫)。
謝謝,
Rails 4使用AES-256根據您應用的secret_token_base
使用密鑰加密Cookie。
以下是解密會話cookie的一般方案:
我找不到一個可以輕松解密消息的網站(建議是受歡迎的),以編程方式可以這樣做:
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中的默認開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.