鱼C论坛

 找回密码
 立即注册
查看: 1825|回复: 5

有关于加密代码的问题

[复制链接]
发表于 2023-8-12 18:47:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
"""双重加密"""
#请改进课堂中的代码,实现双重加密(先执行凯撒加密,再执行莫斯加密)
plain = input("请输入明文:")
y = int(input("请输入移动的位数:"))

#以下为凯撒密码的加密方式
a1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
b1 = "abcdefghijklmnopqrstuvwxyz"
list1 = a1 + b1
a2 = a1[y:] + a1[:y]
b2 = b1[y:] + b1[:y]
list2 = a2 + b2
table1 = str.maketrans(list1, list2)

#以下为摩斯密码加密的方式
mosi=['.-', '-...', '-.-.', '-..', '.', '..-.',
                 '--.', '....', '..', '.---', '-.-', '.-..',
                 '--', '-.', '---', '.--.', '--.-', '.-.',
                 '...', '-', '..-', '...-', '.--', '-..-',
                 '-.--', '--..', '.----', '..---', '...--',
                 '....-', '.....', '-....', '--...', '---..',
                 '----.', '-----']

unmosi=['a','b','c','d','e','f','g','h','i','j','k','l','m','n',
        'o','p','q','r','s','t','u','v','w','x','y','z',
        '1','2','3','4','5','6','7','8','9','0']

plain_kaisa = plain.translate(table1)
print("凯撒加密后的密文是:", plain_kaisa)

plain_combine = [mosi[unmosi.index(each)] for each in plain_kaisa]
print("凯撒、摩斯混合加密后的密文是:", plain_combine)
我想问的是,摩斯密码只有大写或小写的字母机密,但是如果加密后的凯撒密码大小写都有那该怎么办呢?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-12 18:48:36 | 显示全部楼层
如果加密后的凯撒密码同时包含了大小写字母,而摩斯密码只针对大写或小写字母进行加密,可以考虑以下两种方法:

1. 方法一:将凯撒密码加密后的密文统一转换为大写或小写字母,并在摩斯密码加密阶段使用相应的大小写字母表。这样可以确保凯撒密码和摩斯密码都使用相同的字母大小写。具体代码如下所示:
import string

# ...

plain_kaisa = plain.translate(table1)
plain_kaisa = plain_kaisa.upper()  # 将凯撒密码密文统一转换为大写

print("凯撒加密后的密文是:", plain_kaisa)

plain_combine = [mosi[unmosi.index(each.lower())] for each in plain_kaisa]  # 使用小写字母表进行摩斯密码加密

print("凯撒、摩斯混合加密后的密文是:", plain_combine)

2. 方法二:分别对凯撒密码中的大写和小写字母进行加密,然后将两部分加密结果合并。在摩斯密码解密时,需要分别解密大写和小写字母,最后再合并还原密文。具体代码如下所示:
import string

# ...

plain_kaisa_upper = plain.translate(str.maketrans(a1, a2))  # 对大写字母进行凯撒密码加密
plain_kaisa_lower = plain.translate(str.maketrans(b1, b2))  # 对小写字母进行凯撒密码加密

print("凯撒加密后的密文是:", plain_kaisa_upper + plain_kaisa_lower)

plain_combine = []
for each in plain_kaisa_upper:
    plain_combine.append(mosi[unmosi.index(each)])  # 使用摩斯密码加密大写字母

for each in plain_kaisa_lower:
    plain_combine.append(mosi[unmosi.index(each.lower())])  # 使用摩斯密码加密小写字母

print("凯撒、摩斯混合加密后的密文是:", plain_combine)

这两种方法都可以处理凯撒密码加密后同时包含大小写字母的情况。根据你的实际需求选择其中一种即可。希望对你有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-12 18:48:38 | 显示全部楼层
在这种情况下,您可以使用两个不同的摩斯密码列表,一个用于大写字母,另一个用于小写字母。然后,根据明文中的字符类型选择相应的摩斯密码列表进行加密。以下是修改后的代码:
# 以下为摩斯密码加密的方式
mosi_upper = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..']
mosi_lower = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..']

unmosi_upper = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
unmosi_lower = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

plain_kaisa = plain.translate(table1)
print("凯撒加密后的密文是:", plain_kaisa)

plain_combine = []
for each in plain_kaisa:
    if each.isupper():
        plain_combine.append(mosi_upper[unmosi_upper.index(each)])
    else:
        plain_combine.append(mosi_lower[unmosi_lower.index(each)])

print("凯撒、摩斯混合加密后的密文是:", plain_combine)

这样,无论凯撒加密后的密文是大写还是小写,都可以根据字符类型选择相应的摩斯密码进行加密。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-12 18:55:31 | 显示全部楼层
isdkz 发表于 2023-8-12 18:48
在这种情况下,您可以使用两个不同的摩斯密码列表,一个用于大写字母,另一个用于小写字母。然后,根据明文 ...

空格该如何处理呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-12 19:02:59 | 显示全部楼层
小儿无赖 发表于 2023-8-12 18:55
空格该如何处理呢?

用 .split() 分割开

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2023-8-12 19:30
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 09:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表