<h2>两种python3溶液的比较</h2>
<p>第一个是基于<a href="https://docs.python.org/3/library/functions.html#zip" rel="noreferrer">zip</a>:</p>
<pre><code>def encrypt1(var, key):
return bytes(a ^ b for a, b in zip(var, key))
</code></pre>
<p>第二个使用<a href="https://docs.python.org/3/library/stdtypes.html#int.from_bytes" rel="noreferrer">int.from_bytes</a>和<a href="https://docs.python.org/3/library/stdtypes.html#int.to_bytes" rel="noreferrer">int.to_bytes</a>:</p>
<pre><code>def encrypt2(var, key):
key = key[:len(var)]
int_var = int.from_bytes(var, sys.byteorder)
int_key = int.from_bytes(key, sys.byteorder)
int_enc = int_var ^ int_key
return int_enc.to_bytes(len(var), sys.byteorder)
</code></pre>
<p>简单测试:</p>
<pre><code>assert encrypt1(b'hello', b'supersecretkey') == b'\x1b\x10\x1c\t\x1d'
assert encrypt2(b'hello', b'supersecretkey') == b'\x1b\x10\x1c\t\x1d'
</code></pre>
<p>使用长度为1000字节的<code>var</code>和<code>key</code>进行性能测试:</p>
<pre><code>$ python3 -m timeit \
-s "import test_xor;a=b'abcdefghij'*100;b=b'0123456789'*100" \
"test_xor.encrypt1(a, b)"
10000 loops, best of 3: 100 usec per loop
$ python3 -m timeit \
-s "import test_xor;a=b'abcdefghij'*100;b=b'0123456789'*100" \
"test_xor.encrypt2(a, b)"
100000 loops, best of 3: 5.1 usec per loop
</code></pre>
<p>整数方法似乎要快得多。</p>