leonlu
2014-12-30 11:45:42 +08:00
在服务器接受一个cookie的时候, 有个工作就是要鉴定这个cookie是不是合法的. 因为不怀好意者可以尝试伪造cookie. 所以cookie要有一个防伪. 这里用到的方法叫数字摘要.
假设cookie值是tom, 数字摘要的工作过程是这样的:
生成cookie
1. 设定一个密码, 假设是cat
2. 把cookie值和密码用|连接起来, 即tom|cat, 然后用摘要算法(例如sha1)生成签名, 假设签名为xyz(一般是base64的编码).
3. 最终发送cookie也是两个部分, 内容|签名, 即: tom|xyz
验证cookie
1. 将接收到的cookie值tom|xyz拆分成tom和xyz
2. 将cookie值与密码用|连接起来, 即tom|cat, 然后用同样的摘要算法生成签名, xyz
3. 对比上边拆分xyz和加密结果是否一致, 如果一致, 那么认为这个cookie合法.
一般来讲, 我们认为hash算法是单向的, 也就是不能从签名反向计算出来原文tom|cat. 这也就保证了我们的签名是安全的.
如果cookie的内容可能也比较敏感, 比如uid=1. 可以做一次加密. 这就要求能把原文1从密文中解出来. 可以用一下诸如aes等对称加密算法. 由于这个内容在客户上不用解密, 加密密钥也就不需要传输, 因此也是安全的.