鱼C论坛

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

有关于加密代码的问题

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

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

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

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

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

  13. #以下为摩斯密码加密的方式
  14. mosi=['.-', '-...', '-.-.', '-..', '.', '..-.',
  15.                  '--.', '....', '..', '.---', '-.-', '.-..',
  16.                  '--', '-.', '---', '.--.', '--.-', '.-.',
  17.                  '...', '-', '..-', '...-', '.--', '-..-',
  18.                  '-.--', '--..', '.----', '..---', '...--',
  19.                  '....-', '.....', '-....', '--...', '---..',
  20.                  '----.', '-----']

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

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

  26. plain_combine = [mosi[unmosi.index(each)] for each in plain_kaisa]
  27. print("凯撒、摩斯混合加密后的密文是:", plain_combine)


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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  1. import string

  2. # ...

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

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

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

  7. print("凯撒、摩斯混合加密后的密文是:", plain_combine)
复制代码


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

  1. import string

  2. # ...

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

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

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

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

  11. print("凯撒、摩斯混合加密后的密文是:", plain_combine)
复制代码


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

使用道具 举报

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

  1. # 以下为摩斯密码加密的方式
  2. mosi_upper = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..']
  3. mosi_lower = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..']

  4. 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']
  5. 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']

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

  8. plain_combine = []
  9. for each in plain_kaisa:
  10.     if each.isupper():
  11.         plain_combine.append(mosi_upper[unmosi_upper.index(each)])
  12.     else:
  13.         plain_combine.append(mosi_lower[unmosi_lower.index(each)])

  14. print("凯撒、摩斯混合加密后的密文是:", plain_combine)
复制代码


这样,无论凯撒加密后的密文是大写还是小写,都可以根据字符类型选择相应的摩斯密码进行加密。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

空格该如何处理呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

用 .split() 分割开

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2023-8-12 19:30
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 05:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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