简朴明白:摘要就是 Hash,也就是把 A 单向映射 B,所谓的单向就是指 B 无法逆向推导出 A。
一个简朴的代码例子:
function myHash(value1) {
let value2 = 0;
for (let i = 0; i <= value1; i++) {
value2 += i;
}
return value2 % 100; // 为了简化,取模100
}
const A1 = 100;
const B1 = myHash(A1); // 50
const A2 = 99;
const B2 = myHash(B2); // 50
复制代码
如果知道 A 的值,那么这里可以推导出 B 的值;
但是如果只知道 B 的值,那么是没有办法知道 A 详细的值的,比如这里 B 是 50,我们也不知道它对应的 A 到底是 99 还是 100 大概别的数。
我们常常说的什么 MD5, 冲突散列表 base64、哈夫曼编码之类的,其实都是一种摘要算法。
1.2 摘要的作用
摘要有一个特点就是,输入哪怕只变动一点,输出也可能会有巨大的变化,让人找不到规律。
如许就可以也就可以防止数据被篡改,保证其完整性。
详细到登录场景,前端可以先用 base64 把数据 data 摘要得到一个 hash1,再把两者一起发给后端。
后端拿到数据后,也把 data 用 base64 摘要,得到 hash2,再对比 hash1 和 hash2,如果一样,就阐明 data 没有被篡改过。
这时间,有人就会说了——“这也没用啊,人家都能改你 data 了,那直接把你 hash 一起改了不就完了”
诶,好东西总是成套的,要想更安全,还得搭配其他本领凑成丝滑小连招。
2. 密钥加密