汉字简易加密解密小程序

最近在上密码学,随便写着玩玩。

import linecache
import msvcrt


def chineseToUnic(ch):  #汉转U
    return ch.encode('unicode_escape')


def UnicTochinese(ch):  #U转汉
    ch1 = ch.decode('unicode_escape')
    return ch1


def charToUnic(ch):  #二次加密
    keycreate = []
    strsave = []
    saver = []
    num = 0
    for i in range(0, len(ch)):
        if ch[i] > 256:
            num = ch[i]//256
            strsave.append(ch[i] % 256)
            keycreate.append(num)
        if ch[i] <= 256:
            ketcreate.append(0)
            strsave.append(ch[i])
    saver.append(keycreate)
    saver.append(strsave)
    return saver


def Whispersfor604(PlainU): #明文加密
    k = 5#加密键值(可更改)
    strsave = []
    numsave = 0
    for i in range(0, len(PlainU)):
        numsave = PlainU[i]*k*abs(k-2)#加密算法(可更改)
        strsave.append(numsave)
    return strsave


def road(key, whispermath): #加密字符显现
    intstrsave = []
    for i in range(0, len(whispermath)):
                intstrsave.append(chr(whispermath[i]))
    strsaver = ''.join(intstrsave)
    return strsaver


def scream(num):#加密符号生成
    str = []
    for i in range(0, len(num)):
        str.append(chr(num[i]))
    return str


def clear(str):#加密符号解密
    result = []
    for i in range(0, len(str)):
        result.append(ord(str[i]))
    return result


def slove(key, whispermath):#二次解密
    numsaver1 = []
    num = 0
    for i in range(0, len(whispermath)):
        num = (int(key[i])*256)+whispermath[i]
        numsaver1.append(num)
    return numsaver1


def slovefor604(PlainU): #密文解密
    k = 5#加密键值(可更改)
    strsave = []
    numsave = 0
    for i in range(0, len(PlainU)):
        numsave = PlainU[i]/(k*abs(k-2))#加密算法(可更改)
        strsave.append(round(numsave))
    return strsave


def simple(list):#密钥简约生成
    numlist = []
    for i in range(0, len(list)):
        numlist.append(str(list[i]))
    str2 = "".join(numlist)
    return str2


strnum = []
strnum2 = []
choice = int(input("输入1进行加密工作,输入2进行解密工作:"))
#加密组
if choice == 1:
    content = input("输入你想加密的明文:")
    writer = input("输入密文留言:")
    contentU = chineseToUnic(content)
    contentH = UnicTochinese(contentU)
    whispers = Whispersfor604(contentU)
    whispersH = charToUnic(whispers)
    a = road(whispersH[0], whispersH[1])
    b = scream(whispersH[1])

    #密钥本地生成
    print("密钥已生成在本地路径,密文名称为:", '南05第'+str(whispersH[1][len(whispersH[1])-1])+'号密文')
    result2txt = simple(whispersH[0])         # data是前面运行出的数据,先将其转为字符串才能写入
    with open('南05第'+str(whispersH[1][len(whispersH[1])-1])+'号密文', 'wt', encoding='utf-8') as file_handle:   # .txt可以不自己新建,代码会自动新建
        file_handle.write(result2txt+"\n")
        for i in range(0, len(b)):
            file_handle.write(b[i]+"\n")
        file_handle.write(writer)

#解密组
if choice == 2:
    U = ''
    num = input("请输入密文中包含的连续数字(左至右):")
    key = " " + input("请输入密文留言:") + "\n"
    f = open('南05第' + num + '号密文', 'r')
    txt = ''
    whispers = ''
    whispers = linecache.getline('南05第' + num + '号密文', 1)
    txt = " "+linecache.getline('南05第' + num + '号密文', len(whispers)+1)
    if txt == key:
        content = []
        for i in range(1, len(whispers)):
            content.append(linecache.getline('南05第' + num + '号密文', i+1).replace("\n", ""))
        contentNum = []
        contentNum = clear(content)
        beforeresult = slove(whispers, contentNum)
        result = slovefor604(beforeresult)
    else:
        exit("留言有问题,停止解密工作")
    for i3 in range(0, len(result)):
        num = 0
        num = result[i3]
        strnum.append(num)
    U = UnicTochinese(bytes(strnum))
    print("解析成功,密文内容为:" + U)
print("程序将在三秒后退出")
import time
time.sleep(3)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cola_Dream

大学生在线乞讨(滑稽)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值