Python2 XOR加密代码迁移3.9报错:ord()函数入参类型异常求解
问题根因
- Python 3 中
binascii.unhexlify()返回的是bytes类型,直接遍历bytes对象得到的每个元素本身就是0-255范围的整数,不需要再调用ord()转换,这才是报错的直接原因,和ord()本身的版本差异无关。 - 现有代码还存在两个隐藏问题:
encrypt函数返回值是bytes类型,和标注的返回类型str不符decrypt函数逻辑错误,当前实现最后返回的仍是加密后的十六进制值,没有返回解密后的原始字符串
修复后完整代码
import binascii def encrypt(content: str, key: str) -> bytes: key_id = 0 xored = "" for c in content: xored += chr(ord(key[key_id % len(key)]) ^ ord(c)) key_id += 1 return binascii.hexlify(xored.encode()) def decrypt(content: bytes, key: str) -> str: key_id = 0 xored = "" # 遍历unhexlify返回的bytes,c本身就是int,直接参与异或运算即可 for c in binascii.unhexlify(content): xored += chr(ord(key[key_id % len(key)]) ^ c) key_id += 1 # 直接返回解密后的明文,不需要再转十六进制 return xored
效果验证
>>> encrypt("foo", "123") b'575d5c' >>> decrypt(b"575d5c", "123") 'foo'
内容的提问来源于stack exchange,提问作者user16042504
相关产品推荐
相关产品推荐

