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

grep · October 12, 2019 · Last by grep replied at October 14, 2019 · 534 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

共收到 8 条回复 时间 点赞

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

grep #2 · October 14, 2019 作者
林胖 回复

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

grep 回复

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

grep #4 · October 14, 2019 作者
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代码是怎么写的

grep #5 · October 14, 2019 作者
arrow 回复

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

grep 回复

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

grep #7 · October 14, 2019 作者

有示例代码可以参考下吗

grep #8 · October 14, 2019 作者

已解决

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