除了你不应该在cookie中存储重要信息这一事实外,你建议我使用什么加密方法来加密cookie的内容?
一个关键的问题是,cookie只能容纳如此多的数据(我认为它是4k?),因此加密算法不应该将内容的大小增加到成为问题的程度。
Cookie目前存储:
WebsiteId (integer value
Name varchar(50)
Country varchar(50)
答案 0 :(得分:5)
听起来您确实希望防止数据被篡改,而不是加密数据。一种简单的方法是使用HMAC。基本上,您有一个服务器机密,您使用服务器机密散列数据,并将散列输出放在cookie中。要验证它,请从cookie中删除哈希值,使用服务器密钥计算其余数据的哈希值,然后根据cookie中的哈希值进行检查。数据无法被篡改,因为攻击者无法计算正确的哈希值,因为他们不知道服务器密钥。
因此,例如,如果数据是“foo = bar& baz = qux”,您将计算“foo = bar& baz = qux”的安全散列,说它是“EN0RmBxNGyo”并将cookie设置为“富=栏&安培;巴兹= qux&安培;散列= EN0RmBxNGyo”。然后当你收回cookie时,你删除哈希以获得“foo = bar& baz = qux”并计算其哈希值。你再次得到“EN0RmBxNGyo”,它与cookie中的哈希相匹配,所以你接受了cookie。
如果攻击者更改“foo = bar& baz = qux”,则哈希将不匹配,并且cookie将被拒绝。他们无法计算与更改数据相对应的哈希值,因为他们不知道服务器用于计算哈希值的秘密。
请注意,您应该有一位称职的密码学家审核您的实施。实施不当的HMAC容易受到length-extension attacks的攻击,Flickr发现the hard way这一事实。