我在Python中使用XOR加密模型,除了数字和标点符号之外,一切都很好。
任何数字或标点符号都会为您提供无效的二进制字符串,但至少英文字母中的任何基本字母都可以使用。
我在这里做错了什么?我已将其追溯到这种方法:
def IMpassEnc(self,password):
binaryList = ""
for i in password:
if i == " ":
binaryList += "00100000" #adding binary for space
else:
tmp = bin(int(binascii.hexlify(i),16)) #Binary Conversion
newtemp = tmp.replace('b','')
binaryList += newtemp
return binaryList
答案 0 :(得分:2)
您需要生成8位宽的二进制表示; bin()
不为您提供。
产生这些结果的更好方法是使用format(value, '08b')
;这产生8个字符宽的二进制表示,用0填充。 ord()
将是获得给定字符的整数代码点的更直接的方法:
>>> format(ord(' '), '08b')
'00100000'
>>> format(ord('a'), '08b')
'01100001'
>>> format(ord('!'), '08b')
'00100001'
或使用''.join()
组合在一起:
def IMpassEnc(self, password):
return ''.join(format(ord(c), '08b') for c in password)