zoukankan      html  css  js  c++  java
  • 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))
    
  • 相关阅读:
    用Aspose.Cells控件读取Excel
    win8 X64 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
    sql添加自动增长列
    TextBox控件设置ReadOnly=true后台取不到值三种解决方法(转)
    Winform程序以Icon的形式显示在任务栏右下角
    【默默努力】fishingGame
    【默默努力】h5-game-heroVSmonster
    【默默努力】h5-game-blockBreaker
    【默默努力】ig-wxz-and-hotdog
    vue-property-decorator用法
  • 原文地址:https://www.cnblogs.com/KamanFuture/p/11773511.html
Copyright © 2011-2022 走看看