2019-2020-1学期 20192428 第五周作业——XOR 加密

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))
原文地址:https://www.cnblogs.com/KamanFuture/p/11773511.html