小儿无赖 发表于 2023-8-12 18:47:30

有关于加密代码的问题

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

#以下为凯撒密码的加密方式
a1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
b1 = "abcdefghijklmnopqrstuvwxyz"
list1 = a1 + b1
a2 = a1 + a1[:y]
b2 = b1 + 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 = for each in plain_kaisa]
print("凯撒、摩斯混合加密后的密文是:", plain_combine)


我想问的是,摩斯密码只有大写或小写的字母机密,但是如果加密后的凯撒密码大小写都有那该怎么办呢?

陶远航 发表于 2023-8-12 18:48:36

如果加密后的凯撒密码同时包含了大小写字母,而摩斯密码只针对大写或小写字母进行加密,可以考虑以下两种方法:

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

import string

# ...

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

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

plain_combine = 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)# 使用摩斯密码加密大写字母

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

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


这两种方法都可以处理凯撒密码加密后同时包含大小写字母的情况。根据你的实际需求选择其中一种即可。希望对你有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 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)
    else:
      plain_combine.append(mosi_lower)

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


这样,无论凯撒加密后的密文是大写还是小写,都可以根据字符类型选择相应的摩斯密码进行加密。

小儿无赖 发表于 2023-8-12 18:55:31

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

空格该如何处理呢?

isdkz 发表于 2023-8-12 19:02:59

小儿无赖 发表于 2023-8-12 18:55
空格该如何处理呢?

用 .split() 分割开
页: [1]
查看完整版本: 有关于加密代码的问题