#!/usr/bin/env python3
import binascii
var=binascii.a2b_qp("hello")
key=binascii.a2b_qp("supersecretkey")[:len(var)]
print(binascii.b2a_qp(var))
print(binascii.b2a_qp(key))
#here i want to do an XOR operation on the bytes in var and key and place them in 'encryption': encryption=var XOR key
print(binascii.b2a_qp(encrypted))
如果有人能教我如何做到这一点,我会很高兴的。对整个数据类型转换来说非常新,所以是的……阅读python wiki并不像我希望的那样清晰:(。
两种python3溶液的比较
第一个是基于zip:
第二个使用int.from_bytes和int.to_bytes:
简单测试:
使用长度为1000字节的
var
和key
进行性能测试:整数方法似乎要快得多。
看起来您需要做的是将消息中的每个字符与键中的相应字符进行异或。但是,要做到这一点,您需要使用
ord
和chr
进行一些相互转换,因为您只能使用异或数字,而不能使用字符串:注意
binascii.a2b_qp("hello")
只是将一个字符串转换为另一个字符串(尽管可能使用不同的编码)。您的方法和上面的代码只有在密钥至少与消息一样长时才起作用。但是,如果需要,可以使用
itertools.cycle
轻松地重复该键:为了解决unicode/多字节字符(在下面的注释中提出)的问题,可以将字符串(和键)转换为字节,将它们压缩在一起,然后执行XOR,如下所示:
相关问题 更多 >
编程相关推荐