问题引出
在C/S模式中, 客户端想要支付就要通过网络向服务器端发送请求,
那么问题来了, 在通过网络传输过程中的数据是可以进行拦截和修改伪造的,
也就说黑客可以拦截通过某个路由的所有数据,比如你的支付申请, 任意修改后再发送到服务端,
服务端收到的是你的支付申请, 你购买了1双鞋, 被黑客修改成了100000双鞋,
显而易见支付, 支付端是要验证判断请求是否正确, 是否被修改,
所以对于重要的网络请求需要加密 , 使得请求数据不容易被修改,
即使被修改以后也能被发现 , 进而拒绝该请求
思路
我们最直接的想法就是
客户端对请求数据 按某种算法加密, 发送到服务器端后对 加密算法逆向得到解密数据
(这种加密算法称之为对称加密算法, 即可加密也可解密),
- 比如对请求"123"做乘3加密得到加密后数据"369", 客户端得到"369"再用相应的解密算法除3解密得到有效数据"123",
- 这样黑客截获到"369"不知道加密解密算法 进而不知道"369"的意义,不能改成自己想要的数据
这种加密算法如aes(适合对小量数据加密,计算量相对大), des(适合对文件加密), 算法是公开的,参数是自己自定义的, 如*3算法里的3,也就是密钥
但是这样存在这样的问题:
- 通过规律猜测推测出加密算法,这样加密也就失去了作用
- 虽然不能任意修改,但是我可以捣乱,把"369"改成"399"客户端解密后得到"133", 你购买了1双鞋, 被黑客修改后成了100000双鞋,同样会造成损失, 也是不安全的
加密升级:
也就是说