【求解释】关于第三方接口调用中安全的疑问

首先声明,我对什么加密解密,公钥私钥啊就是一小白。在看支付宝接口的时候,突然心生一疑问:与接口通讯中如何保证不被窃取和篡改?不懂~求解释。

下面是一个典型的支付宝接口方式。

  1.  去支付宝申请接口权限,然后他会给你一个“partnerId” 和一个 “privateKey”。
  2. 然后请求某个接口的时候应该是这样的:  serviceURI+msg&partnerId=partnerId&sing=MD5(msg+partnerId+privateKey);就是说你的报文和partnerId是明文的,然后用你要发送的报文+你的partnerId+你的privateKey做MD5运算,产生签名。同时把签名发给支付宝。
  3. 支付宝接到请求后,从明文拿到你的partnerId,再从他库里检索到你的privateKey。同样对报文+你的partnerId+你的privateKey做MD5运算,如果算出得签名和你发给他的签名没有问题,认为消息是没有篡改过的。

  那,我的问题是。如果我是黑客,我也去支付宝申请了一对我的“partnerId” 和 “privateKey”。然后,我拦截了你发送给支付宝的请求,截下来之后,我对请求做了篡改,再把其中的partnerId替换成我的。并用我的partnerId和privateKey重新做签名。最后再把篡改后的请求发送给支付宝。支付宝接收到的时候由于partnerId是我的了。我也是用的我的partnerId和privateKey做签名。所以他的签名验证应该是可以通过的。也就说,他会认为这个请求没有问题!但事实上这个请求是被我篡改了的! 这是怎么回事呢?

  有同学说,因为使用了HTTPs 所以不用担心请求被拦截的问题。可惜我对HTTPs同样不了解。如果HTTPs足够可靠的话。那还要什么privateKey,还要签名干什么?直接请求就行了啊。不懂。希望大家能给我解释一下,越详细越好。给我科普科普。

  PS:我这只是拿支付宝举例子,貌似大部分第三方接口调用都是这个模式~

posted @   咖啡不苦  阅读(3579)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示