特殊字符不能在python中转换为二进制文件

时间:2013-11-06 12:40:09

标签: python encryption unicode binary

我在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

1 个答案:

答案 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)