XOR 加密
关于XOR加密的python实现是一个很值得思考的问题,经过思路整理我大致明确了自己的方向:
- 将秘密信息输入后转为U码(Unicode)
- 利用二进制转换U码,检索其二进制码的比特数字数,生成对应相同位数的二进制key
- 对key和U码二进制转码进行异或运算,得出加密信息
因此我对上述思路做出尝试,我的python代码如下:
# XOR加密
# 准备工作
content = input("请输入你要加密的内容:")
strcon = str(content) #目标字符化
codelist =[] #U码列表创建
loopnum = 0 #循环圈数
strnum = len(strcon) #检索字符数,进行逐次转化
# 逐次转化并放入U码列表
while strnum > loopnum :
Ucode = ord(strcon[loopnum])
loopnum = loopnum + 1
codelist.append(Ucode)
print('其Unicode码为:{}'.format(codelist))
# 逐个取出并统一在一个字符串中
loopnum2 = 0
goal = "" #目标字符串变量
while strnum > loopnum2 :
container = codelist[loopnum2]
goal = goal + str(container) #逐次填入
loopnum2 = loopnum2 + 1
print("去符号化为" + goal)
goal2 = int(goal) #goal变量数据化
print('''其二进制转码为:{:b}
(请将此码输入到下一个程序中实现半自动化)'''.format(goal2)) #输出二进制码
# 随机生成位数相同的key
part_input = str(input('请输入你加密内容的的二进制转码:'))
binarynum = len(part_input) #检索二进制码数以生成对应数位key
import random
loopnum3 = 0
strkey = ""
while loopnum3 <= binarynum:
intkey = random.randint(0,1) #随机生成二进制key
strkey = strkey + str(intkey)
loopnum3 = loopnum3 + 1
none = ""
print('''{4:-^50}
你输入的内容为:{0}
其Unicode码为:{1}
U码的二进制转码为:{2:b}
你的FOX密钥码为:{3}
{4:-^50}'''.format(content,goal,goal2,strkey,none))
此为第一阶段,我运用了while循环、字符串处理变化、字符串类型的格式化、字符串处理函数以及random库(生成随机key值)以及众多基础函数。其得出结果为下:
>>>请输入你要加密的内容:python
其Unicode码为:[112, 121, 116, 104, 111, 110]
去符号化为112121116104111110
其二进制转码为:110001110010101011000111110100001001101001011010000000110
(请将此码输入到下一个程序中实现半自动化)
>>>请输入你加密内容的的二进制转码:110001110010101011000111110100001001101001011010000000110
--------------------------------------------------
你输入的内容为:python
其Unicode码为:112121116104111110
U码的二进制转码为:110001110010101011000111110100001001101001011010000000110
你的FOX密钥码为:1111110111110011110111110011000011111011000010000100111000
--------------------------------------------------
在此阶段中我解决了大多数难题,也不禁让人感叹,代码总比看起来难得多。
一下是其在vs中运行结果:
# 进行异或运行
loopnum4 = 0
goal3 = "" #结果字符串
XOR1 = "0" #两数相同
XOR2 = "1" #两数不同
while loopnum4 < binarynum :
#searchnum = part_input[loopnum4]
#searchkey = strkey[loopnum4]
searchnum_int = int(part_input[loopnum4])
searchkey_int = int(strkey[loopnum4])
if searchnum_int != searchkey_int :
goal3 = goal3 + XOR2
else :
goal3 = goal3 + XOR1
loopnum4 = loopnum4 + 1
print("你的加密信息为:" + goal3)
此部分代码为进行XOR运算加密信息,以及输出:
请输入你要加密的内容:good
其Unicode码为:[103, 111, 111, 100]
去符号化为103111111100
其二进制转码为:1100000000001111001101011000110111100
(请将此码输入到下一个程序中实现半自动化)
请输入你加密内容的的二进制转码:1100000000001111001101011000110111100
你的FOX密钥为:0111000111010100100000111111010100111
你的加密信息为:1011000111011011101101100111100011011
--------------------------------------------------
你输入的内容为:good
其Unicode码为:103111111100
U码的二进制转码为:1100000000001111001101011000110111100
你的FOX密钥码为:0111000111010100100000111111010100111
--------------------------------------------------
至此,我完全实现了XOR加密
接下来我会努力实现对加密信息的翻译。
以下是我的全部代码(已经纠正一部分小错误):
# XOR加密
# 准备工作
content = input("请输入你要加密的内容:")
strcon = str(content) #目标字符化
codelist =[] #U码列表创建
loopnum = 0 #循环圈数
strnum = len(strcon) #检索字符数,进行逐次转化
# 逐次转化并放入U码列表
while strnum > loopnum :
Ucode = ord(strcon[loopnum])
loopnum = loopnum + 1
codelist.append(Ucode)
print('其Unicode码为:{}'.format(codelist))
# 逐个取出并统一在一个字符串中
loopnum2 = 0
goal = "" #目标字符串变量
while strnum > loopnum2 :
container = codelist[loopnum2]
goal = goal + str(container) #逐次填入
loopnum2 = loopnum2 + 1
print("去符号化为" + goal)
goal2 = int(goal) #goal变量数据化
print('''其二进制转码为:{:b}
(请将此码输入到下一个程序中实现半自动化)'''.format(goal2)) #输出二进制码
# 随机生成位数相同的key
part_input = str(input('请输入你加密内容的的二进制转码:'))
binarynum = len(part_input) #检索二进制码数以生成对应数位key
import random
loopnum3 = 0
strkey = ""
while loopnum3 < binarynum:
intkey = random.randint(0,1) #随机生成二进制key
strkey = strkey + str(intkey)
loopnum3 = loopnum3 + 1
none = ""
print('你的FOX密钥为:' + strkey)
# 进行异或运行
loopnum4 = 0
goal3 = "" #结果字符串
XOR1 = "0" #两数相同
XOR2 = "1" #两数不同
while loopnum4 < binarynum :
#searchnum = part_input[loopnum4]
#searchkey = strkey[loopnum4]
searchnum_int = int(part_input[loopnum4])
searchkey_int = int(strkey[loopnum4])
if searchnum_int != searchkey_int :
goal3 = goal3 + XOR2
else :
goal3 = goal3 + XOR1
loopnum4 = loopnum4 + 1
print("你的加密信息为:" + goal3)
# 输出结果
print('''{4:-^50}
你输入的内容为:{0}
其Unicode码为:{1}
U码的二进制转码为:{2}
你的FOX密钥码为:{3}
你的加密信息为:{4}
{5:-^50}'''.format(content,goal,part_input,strkey,goal3,none))