python兼容js base64_前端base64编码的坑

故事背景:

前后端每次通讯的时候,需要验证sign,这个sign经过了b64_md5两步骤操作。

在python端,生成sign的代码如下:

import md5

import base64

m = md5.new("32438c62a70a4d4ebfb1730b262d4bea&POST&/voip/tpsn/sendsms&{bussiness={parameters=[Tom]&phone=18688721878&template=21}&system={appkey=580419120263&charset=UTF-8&timestamp=1478081529&version=1.0.0}}")

print m.digest() // 这个方法出来的是二进制数据

sign = base64.urlsafe_b64encode(m.digest())[:-2]

print sign

print m.hexdigest() //这个方法是16进制数显示的

这里先md5再经过base64, 使用了一个urlsafe_b64encode的方法。

前端在实现以上逻辑的时候,当然会首选现成的库文件,我所找到的代码参见这里, 直接使用b64_md5这个方法皆可。

但是这样生成的sign与python生成的sign有一些细微的区别,比如js生成的带有+号,而在python中则显示为-号。这让我想到应该调查下python中urlsafe的处理方式。

其中提到:

由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+和/分别变成-和_

于是对b64_md5之后返回的字符串进行替换:

var hash = b64_md5(newString);

hash = hash.replace(/\+/g, "-");

hash = hash.replace(/\//g, "_");

即可生成与python相同的sign。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值