学了python的异或加密和解密,今天就再复习一遍,不然又还回给老师了…(尴尬一笑)
操作环境
win10,python3
异或简单介绍
在二进制中,1与0异或的结果为1,即 1^0=1
又如:1010=00,1001=11,101^110=011
很简单,每个对应位的数相同结果就为0,不同则为1
基本思路
1、通过明文字符与密钥字符一一异或,当然,异或是取得该字符对应的ASCII码,
2、将该字符对应的ASCII码转换成二进制数,最后两个二进制数进行异或运算,得到一个新
的二进制数,
3、再将该二进制数转换成ASCII码(就是把二进制数转换成十进制数),最终获
得该ASCII码对应的字符,获得一个密文字符。
说的比较啰嗦,说白了就是"ord()"方法和"chr()"方法的使用,详情请看代码>>>
加密代码
#加密
key='A' #密钥
message='haoiphgaop' #明文
ml=len(message) #分别得到密钥和明文的长度
kl=len(key)
key=ml//kl*key+key[:ml%kl] #因为要一对一的异或,所以key要变化
pwd=[] #通过取整,求余的方法重新得到key
for i in range(len(key)):
pwd.append(chr(ord(key[i])^ord(message[i]))) #一对一异或操作,得到结果,其中,"ord(char)"得到该字符对应的ASCII码,"chr(int)"刚好相反
print(''.join(pwd))
加密结果
) .(1)& .1 #包括空格共10个字符
解密代码
#解密
result=[]
#pwd为密文
for j in range(len(key)):
result.append(chr(ord(pwd[j])^ord(key[j]))) #跟KEY异或回去就是原明文
result=''.join(result)
print(result)
解密结果
haoiphgaop #正是原明文
注意
解密中跟KEY异或回去就是原明文…
举个例子吧:
10101^11100=01001
结果是01001
01001^10101=11100
01001^11100=01001
异或的结果再与原来的其中一个数异或运算就得到另外一个原来的数