<p>您可以使用Python <code>list</code>为C <code>char *buf</code>编写此代码,对列表进行变异,使其包含结果,但更为Python的方法是创建一个包含xor编码字节的新缓冲区并返回它。你知道吗</p>
<p>对于较早版本的Python,您可以创建buf字符串中每个字符的<code>ord()</code>值的列表,将该列表的元素与键异或,使用<code>chr()</code>将int转换回字符,然后<code>join()</code>将单个字符转换回单个字符串。但是有了更现代的Python版本,你可以让bytearray来做大部分的脏活。你知道吗</p>
<pre><code>#! /usr/bin/env python
def xor_crypt(key, buf):
return str(bytearray([i ^ key for i in bytearray(buf)]))
plaintxt = "Hello, world!"
key = 42
print 'original ', `plaintxt`
encrypted = xor_crypt(key, plaintxt)
print 'encrypted', `encrypted`
decrypted = xor_crypt(key, encrypted)
print 'decrypted', `decrypted`
</code></pre>
<p><strong>输出</strong></p>
<pre><code>original 'Hello, world!'
encrypted 'bOFFE\x06\n]EXFN\x0b'
decrypted 'Hello, world!'
</code></pre>
<p>但是,如果您真的想更紧密地模仿C代码并对<code>buf</code>进行变异,您可以很容易地做到这一点,如下所示:</p>
<pre><code>#! /usr/bin/env python
def xor_crypt(key, buf):
buf[:] = bytearray([i ^ key for i in buf])
plaintxt = "Hello, world!"
key = 42
buf = bytearray(plaintxt)
print 'original ', `buf`, str(buf)
xor_crypt(key, buf)
print 'encrypted', `buf`
xor_crypt(key, buf)
print 'decrypted', `buf`
</code></pre>
<p><strong>输出</strong></p>
<pre><code>original bytearray(b'Hello, world!') Hello, world!
encrypted bytearray(b'bOFFE\x06\n]EXFN\x0b')
decrypted bytearray(b'Hello, world!')
</code></pre>