首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4:如何解密rails 4会话cookie (给定会话密钥和秘密)

Rails 4:如何解密rails 4会话cookie (给定会话密钥和秘密)
EN

Stack Overflow用户
提问于 2016-01-26 12:10:49
回答 1查看 4.3K关注 0票数 4

在Rails 3中,会话cookie可以很容易地用base64解码来解码,但是在Rails 4中,cookie是编码和加密的。

我想知道如何读取rails 4 cookie,它是编码的,也是加密的(假设我们知道密钥库)。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 11:46:59

Rails 4使用AES-256加密基于应用程序的secret_token_base密钥的cookie。

下面是解密会话cookie的一般方案:

  1. 把你的秘密钥匙
  2. 基64解码cookie值。
  3. 将解码后的cookie值拆分为“--”,这将分为两部分,第一部分是加密数据,第二部分是加密方案使用的初始化向量。基站64独立地解码每个部分。
  4. 通过使用AES解密加密密钥和初始化向量对加密数据进行解密。

我找不到一个可以轻松解密消息的网站(欢迎您提供建议),通过编程可以这样做:

代码语言:javascript
复制
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几乎完全相同,它是由ActionDispatch::Cookies中间程序使用的。
  • 这在很大程度上是Rails 4特有的,来自ActionDispatch::Session::CookieJar: 如果您只设置了secret_token,那么您的cookie将由签名,而不是加密的。这意味着用户不能在不知道应用程序的秘密密钥的情况下修改他们的+user_id+,但是可以轻松地读取他们的+user_id+。这是Rails 3应用程序的默认设置。 如果设置了secret_key_base,则cookies将是加密的。这比签名cookie更进一步,因为用户不能修改或读取加密的cookie。这是Rails 4中的默认开始。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35013568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档