首页 > 编程知识 正文

python 数据库框架,welink发送验证码失败

时间:2023-05-06 09:34:40 阅读:41862 作者:2286

我用的是python3,官网上的例子是python2的写法。 问题是python的版本不同。

以下是官方实例代码的一部分剪切

list=[token,timestamp,nonce]

list.sort () )。

sha1=hashlib.sha1 (

映射(sha1.update,list )。

hashcode=sha1.hexdigest (

我直接告诉你这一段是错的。 这也是从我与微信进行比较验证时发送的信息得出的结论。 以下是在网上找到的加密原理,可以有选择地看。

单击“发送”,微服务将GET请求发送到您填写的URL,并携带timestamp、nonce、echostr和signature参数。

其中timestamp是时间戳,nonce是随机数,echostr也是随机数。 这些都很普通。 重要的是signature,它按字典顺序对三个字符串进行排序: nonce、timestamp和token (即,放在网页上的TOKNE )

我们的服务器收到此GET请求后,提取相应的参数,如上所述生成hashcode。 如果该值与参数的signature相同,则将echostr返回给微服务,否则返回null。

微服务接收到此echostr后,会验证此值是否与发送的echostr的值相同,如果相同,则表明此值确实是从我们的服务返回的,验证完成,今后将所有信息发送到此服务地址

这包括一些安全认证知识,感兴趣的朋友可以查阅更详细的资料。 总的来说,就是让通信双方都能确认对方的真实身份。

token验证失败的原因在于map函数。 python的2和3不同吧。 map函数的第一个参数是函数,第二个参数是列表。 作用是使第一个函数按顺序作用于列表中的每个元素。

我在这里又学到了hashlib。 为了防止update的数据过大,可以依次添加要在update中加密的数据。

综上所述,微信的加密是指将list重新排序,并将重新排序后的列表的各要素汇总到用update汇总加密的数据中。 贴上代码帮助理解

import hashlib

sha1=hashlib.sha1 (

sha1 .更新(a ) .编码() utf-8 ) )

sha1.update(b ).encode ) (utf-8 ) )

sha1 .更新(c ) .编码(utf-8 ) )

等于:

sha1 .更新(ABC ) .编码() utf-8 ) )

hashcode=sha1.hexdigest(#获取加密字符串

因此,在python3中,如下变更加密的算法

list=[token,timestamp,nonce]

list.sort () )。

sha1=hashlib.sha1 (

sha1.update (list [0].encode (utf-8 ) )

sha1.update (list [1].encode (utf-8 ) )

sha1.update (list [2].encode (utf-8 ) )

hashcode=sha1.hexdigest (

经过一番辛苦,终于解决了问题。 我不由得想吐槽: python3这么久了,为什么开发文档还没有更新? 而且很多程序还在python2下。 啊,又是python的大毒辣。

希望以上是正文的全部内容,对大家的学习有帮助。 另外,请大家支持。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。