You need to enable JavaScript to run this app. Python2 XOR加密代码迁移3.9报错:ord()函数入参类型异常求解
优惠活动
大模型
产品
解决方案
定价
更多

Python2 XOR加密代码迁移3.9报错:ord()函数入参类型异常求解

问题根因

  • Python 3 中binascii.unhexlify()返回的是bytes类型,直接遍历bytes对象得到的每个元素本身就是0-255范围的整数,不需要再调用ord()转换,这才是报错的直接原因,和ord()本身的版本差异无关。
  • 现有代码还存在两个隐藏问题:
    1. encrypt函数返回值是bytes类型,和标注的返回类型str不符
    2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 15:03:03