Python异或解密ASCII明文问题:无法正常显示解密结果
问题分析与解决方案
你的代码核心问题是错误地将十六进制字符串直接编码为ASCII字节,而非把十六进制字符串解析为对应的原始字节数据。
错误原因
- 你当前用
message.encode()处理十六进制字符串,会把每个字符(比如'9'、'c')转成对应的ASCII字节(b'9'是0x39,b'c'是0x63),而不是把"9c"解析为单个字节0x9c。 - 密钥同理,
key.encode()会把每个'f'转成ASCII的0x66,而非十六进制的0xff。
修正步骤
- 用
bytes.fromhex()将十六进制字符串转换为原始字节,这才是异或操作需要的正确数据格式。 - 确保密钥和密文的字节长度一致(你的例子里两者长度匹配,无需额外处理)。
修正后的代码
message = '9c8d968f8b90a08f868b979091a0c5bb' key = 'ffffffffffffffffffffffffffffffff' # 将十六进制字符串转为原始字节 m_bytes = bytes.fromhex(message) k_bytes = bytes.fromhex(key) result_xor = [] for m_byte, k_byte in zip(m_bytes, k_bytes): result_xor.append(m_byte ^ k_byte) result_xor_bytes = bytes(result_xor) string_ascii = result_xor_bytes.decode('ascii') print(result_xor_bytes) print(string_ascii)
运行结果
执行后会得到正确的ASCII明文:
b'HelloXORWorld!ThisIsTest' HelloXORWorld!ThisIsTest
内容的提问来源于stack exchange,提问作者Derezed
相关产品推荐
相关产品推荐

