微信验证服务器是怎么回事,微信服务器认证为什么需要这么多参数?

本文详细解析了网络通信中账户密码加密的过程,包括随机数nonce和时间戳的作用,确保信息传输的安全性。在微信认证场景下,通过加密技术和参数验证,确保了服务器与客户端之间的身份认证,避免了中间人攻击。同时,讨论了随机数的唯一性和时间戳防止重放攻击的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行微信认证开发的时候,官网文档有这样一段话

7ad1cf8d07552d5b16c45e37e14d9d15.png

当时就想为什么这么多参数,都是什么意思?网上有现成的代码,抄下来就可以运行了

b71f9237c9c9c8bb215f8d121ded83fc.png

可这个疑问一直在心里,百度查询了很多篇文章去解释我这个疑惑,现在就转换成个人的理解记录下来

个人服务器对于访问它的人,不能确定是谁?可能是自己的用户也可能是不明身份的人,这种情况一般会使用账户来判断,如果账户密码没有问题,那么就是自己的用户不是不明身份的人了。

af6fa8a5a3dc1ed4513ea85acb05c863.png

本来是一个皆大欢喜的局面,但是账号密码开始的时候是明文,明文就是:账户是123: 密码是:456,在网络传输的时候,就是123、456的传输,但是中途可能被人解惑了,被别人知道了

b8e27c3c317b902a4703a249c51c81e5.png

针对这种情况,就需要进行账户密码加密了,加密有很多种

95320d555b28f6a0c6e8f32c120c7689.png

随机数+时间戳是非常常见的一种,它的原理是什么呢?

随机数nonce是由服务器提供,在用户请求服务的时候,服务商提供给用户,用户用这个随机数+账户密码按照一定规则(MD5、SHA1)加密处理为一个新的字符

712312389791(随机数)、123(账户)、456(密码)、MD5(规则)

生成:(712312389791 + 123 + 456) + MD5 = 1238979asdqw123

将生成的结果、用户名和随机数发送回服务商

3d4b864def737e5c1ab73d41997716d3.png

(1238979asdqw123 + 123 + 712312389791) -> 服务商

注意此时是没有密码的,也就是说密码没有在中间传输,那么别人截取后也是看不懂1238979asdqw123这个是什么,但是服务器可以看懂,服务器如何看懂呢?

服务器是有用户的密码的,也就是456,那么服务器拿到(1238979asdqw123 + 123 + 712312389791)加上密码就可以生成:(712312389791 + 123 + 456) + MD5 = 1238979asdqw123(服务器生成)

此时服务器用1238979asdqw123(服务器生成)和用户发过来的1238979asdqw123对比,发现这就是我的用户就可以提供服务了,对应到微信服务器认证就是:

1c55b1cfb24df17e8eab5c6f977b6f31.png

那么另外两个参数呢?

因为随机数是服务商发给用户的,当用户将随机数返回后

服务器会验证随机数是否是我曾经发出的,那么就需要将随机数存在服务器端,试想一下,如果用户非常多,每次生成一个随机数,总有可能会生成一个相同的随机数,一个随机数就会对应两个用户,针对这个情况,就加一个时间戳,这个时间戳只和当前时间有关系。

86b0c8d2e68002249d8ddb88773bb624.png

那么服务器第一次给用户的有随机数+时间戳

d609e6afa82e3c13e60748f5eed0966a.png

那么最后一个参数就是返回给微信服务器,告诉它返回成功了,因为你如果随便返回一个内容,微信服务器不认识你,比如返回一个“你好”,所以微信服务器给你什么,你就返回什么,就可以了。

462e818775ba25b07f46794c27e75797.png

这个不用怕被截取,因为目的是个人服务器是否认识微信服务器,而不是微信服务器认识个人服务器。

就是让你信任微信服务器,不是让微信服务器信任你

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值