loy*_*low 0 c# encryption cookies asp.net-mvc-4
除了你不应该在cookie中存储重要信息这一事实之外,你建议我使用什么加密方法来加密cookie的内容?
一个关键的问题是,cookie只能容纳如此多的数据(我认为它是4k?),因此加密算法不应该将内容的大小增加到成为问题的程度.
cookie目前存储:
WebsiteId (integer value
Name varchar(50)
Country varchar(50)
Run Code Online (Sandbox Code Playgroud)
听起来你实际上想要防止数据被篡改,而不是加密它.一种简单的方法是使用HMAC.基本上,您有一个服务器机密,您使用服务器机密散列数据,并将散列输出放在cookie中.要验证它,请从cookie中删除哈希值,使用服务器密钥计算其余数据的哈希值,然后根据cookie中的哈希值进行检查.数据无法被篡改,因为攻击者无法计算正确的哈希,因为他们不知道服务器机密.
因此,例如,如果数据是"foo = bar&baz = qux",您将计算"foo = bar&baz = qux"的安全散列,说它是"EN0RmBxNGyo"并将cookie设置为"foo = bar&baz = qux&hash = EN0RmBxNGyo ".然后,当您获得cookie时,删除哈希以获得"foo = bar&baz = qux"并计算其哈希值.您再次获得"EN0RmBxNGyo",它与cookie中的哈希值匹配,因此您接受cookie.
如果攻击者更改"foo = bar&baz = qux",则哈希将不匹配,并且cookie将被拒绝.它们无法计算与已更改数据相对应的哈希值,因为它们不知道服务器用于计算哈希值的秘密.
请注意,您应该让合格的密码学家审核您的实施.实施不当的HMAC可能容易受到长度扩展攻击,Flickr发现了这个问题.