Python python 异或时,有中文怎么处理

左撇子的菜鸟 · October 12, 2019 · Last by 左撇子的菜鸟 replied at November 19, 2019 · 1670 hits

最近在做接口加密验证,其中参数涉及到中文,当有中文时加密得到的结果与实际结果不符,想请教各位怎么解决
下面是具体代码:
data 是需要传的参数,encrypted_string 是加密串,其中 data 中有中文,主要问题是 ord()中文得到结果位数少了,造成异或结果错误

def xor_string(data,encrypted_string):
"""对参数进行异或处理"""
sl = len(data)
el = len(encrypted_string)
auth_string = str()
for i in range (sl):
auth_string +=chr(ord(data[i])ord(encrypted_string[i % el]))
return auth_string

共收到 10 条回复 时间 点赞
匿名 #1 · October 12, 2019

对字符串做 urlencode,或者其他类似的转码操作,把中文转换成字符再加密

做了转码得到还是错误提示,后台代码是用 php 写的,他们的代码没有转码直接异或

你把 php 代码发出来,python 也不是你这么写的

arrow 回复

function xor_encrypt_bit($value,$encryt_string=""){
for($i=0,$v="";$i<strlen($value);$i++){
$v.=$value{$i} ^ $encryt_string{$i%strlen($encryt_string)};
}
return $v;
}

这是 php 的代码 想请教下正确的 python 代码是怎么写的

arrow 回复

而且现在是传递的参数没有汉字,访问接口是可以返回正确的信息,但是有汉字就会提示错误

php 的中文和 python 不一样,php 处理中文是按字节处理的,一个汉字在 utf-8 编码下占用 3 个字节,php 会计算 3 次,python 只计算一次。
你的 python 代码需要把中文转成 utf-8 然后分 3 次计算 xor。

有示例代码可以参考下吗

已解决

楼主咋解决的???

Zhao Haibin 回复

就是要对数据进行 urlencode 编码,python3.7 中是 parse.quote() 这个方法进行 urlencode 编码,注意这个会对=号也进行编码

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up