1
coolicer OP 结合例子,似乎懂了。登录后,cookie就是加密过的,然后回传解密,这时存到req.signedCookies。只是没有看到,在哪一步用了sign去加密。
|
2
luikore 2014-12-29 11:45:15 +08:00
少年, 你需要分清楚 加密, 摘要 和签名 的区别
|
4
luikore 2014-12-29 14:38:39 +08:00
|
5
leonlu 2014-12-30 11:45:42 +08:00 2
在服务器接受一个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等对称加密算法. 由于这个内容在客户上不用解密, 加密密钥也就不需要传输, 因此也是安全的. |