1, 首先要知道MD5 是一个什么东西
-
简单的说就是就是取模, 比如, 10 % 2, 余零, 2 想得出10, 就很难, 你只能猜.
-
现在有一个字符串 abcd, 下面都是假设
假设 a = 1, b = 2, c = 3, d = 4,
相加 1 + 2 + 3 + 4 = 10,
我们的MD5 算法就是相加%2,
那么这段字符串的MD5 值就是 0 -
现在你只知道, abc 和 md5 = 0 你能推算出 我们的d嘛?
想知道, 得先知道我们的md5规则
然后再一个个去假设d的值, md5 的值是不是零
当然真实的MD5算法不是像上面假设的这么简单 -
这个d就是我们的私钥, 验签者把 abc 和 md5 给我们, 我们把 d 私钥 加在后面, 在和md5去比较, 很轻松的就能验证参数有没有被修改, 是不是我们系统加密下发的.
-
安全问题, abc 和 md5 其中任何一个参数被修改, 验签就是通不过的
2 形象的描述一下
用户A的鸡蛋
用户b的鸡蛋
- MD5 算法做的就是, 把我们的参数和私钥打包成一个鸡蛋壳
- 然后把鸡蛋中的私钥拿走, 把剩余的鸡蛋壳给你
- 你下次拿这剩余的鸡蛋来, 我把私钥填进去, 就知道这个鸡蛋是不是我给你的了
- 每个用户的id不一样, 所以鸡蛋的分割是不一样的, 但真实的md5加密应该是具有顺序的, 鸡蛋里面还可以放版本, 使用不同的私钥
很有意思的问题
- 上面的鸡蛋, 如果我知道了所有其他的参数, 不是就知道了私钥了
- 没有错, 这就说明你的私钥被破解了, 但真实的MD5是没有边界的, 你是不知道这个鸡蛋里面的分布, 也不知道这个私钥块有多大, 他们都是字符, 数学关系, 只能不断的排列, 不断的推算私钥, 暴力破解