【问题标题】:Python XOR errorPython XOR 错误
【发布时间】:2015-02-28 23:17:23
【问题描述】:

所以这是一些过去可以自己工作的代码,但是当我尝试将它实现到我的代码中时,它给了我一个错误,我认为这是因为我改变了 s2 内部的位,还有其他的吗没有 binascii.a2b_qp 的 XOR s3 方法

def xor(s1,s2):
    s3 =''.join(chr(i^j) for i,j in zip(s1,s2))
    s4 = binascii.a2b_qp(s3)
    s5 = ''.join(chr(i^j) for i,j in zip(s2,s4))
    print(s5)

# for testing:
# additional info, s1 is a mutated form of bits from s2 using an S box
s1 = b'\xc3\xbf\x00\x00\xc3\xbf\x00\xc3\xbf\x00\x00'
s2 = b'aaaaaaaa'
xor(s1, s2)

追溯:

Traceback (most recent call last): 
  File "C:\Users\Pavilion g7\workspace\Python Network\RW.py", line 138, in <module> 
    x= xor(m1,m2) 
  File "C:\Users\Pavilion g7\workspace\Python Network\RW.py", line 69, in xor 
    s4 = binascii.a2b_qp(s3) 
ValueError: string argument should contain only ASCII characters

【问题讨论】:

  • 你给它什么输入触发了这个错误?
  • 如果您可以显示整个错误跟踪,而不仅仅是错误消息,将会更有帮助。
  • @Newbie 之前的代码是在 Python 2 上,现在你在 Python 3 上使用它吗? chr 的行为在两个版本之间发生了变化;在 Python 3 中,它返回一个 str(即 unicode)。
  • 等等,i^j,你是在异或两个字符串吗?这还有效吗?
  • 不,我从一开始就在使用 python 3,下面是我在其他地方实现的代码

标签: python python-3.x xor bits


【解决方案1】:

如前所述,chr() 返回一个字符串。

this question 中,您可以获得有关如何替换它的建议。

同样,.join() 不应与空字符串 '' 一起使用,而应与空字节对象 b'' 一起使用。

例子:

def bchr(i):
    return bytes([i])

def xor(s1,s2):
    return b''.join(bchr(i ^ j) for i, j in zip(s1, s2))

s1 = b'\xc3\xbf\x00\x00\xc3\xbf\x00\xc3\xbf\x00\x00'
s2 = b'aaaaaaaa'
s3 = xor(s1, s2)
s4 = binascii.a2b_qp(s3)
s5 = xor(s2, s4)
print(s5)

s5 仍然不是s1,那是因为s2 太短了。替换为

s2 = b'a' * len(s1)

你就完成了。它现在也适用于

s5 = xor(s2, s3)
print(s5 == s1) # -> True

因此完全不需要 binascii 东西。

【讨论】:

  • 我很确定 s1 和 s2 具有相同的位数,因为当我实现逆 Sbox 时,s1 会导致 s2
  • block = b'aaaaaaaa' binary = getBin(block) s1 = initialPerm(binary) s2 = inversePerm(s1) m1= bitsToString(s1) m2= bitsToString(s2) print(m1) print( m2) b'\xc3\xbf\x00\x00\xc3\xbf\x00\xc3\xbf\x00\x00' b'aaaaaaaa'
  • 11 字节有 88 位,8 字节有 64 位。我不知道为什么s1block 长...
  • 是的,您的方法工作正常,我的方法 bitsToString 在我的消息中添加了 3 个字节,我不知道如何或为什么,但是当我在其中将 chr 切换为 bchr 时,从技术上讲,它停止提供开销 chr在我的代码中破坏了 2 个方法非常感谢您的帮助,我对 python 真的很陌生,我给你带来了麻烦:)
猜你喜欢
  • 2012-06-24
  • 2020-02-10
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2017-12-05
  • 2016-06-06
相关资源
最近更新 更多