当前位置: 首页 > 知识库问答 >
问题:

大写字母凯撒密码

赵宏达
2023-03-14

因此,目前我的凯撒密码程序运行良好,每当我使用小写字母。但是,当我用大写输入一个单词或短语时,我想让它工作。这是我现在有的代码。希望你们能帮我完成这件事。

def encrypt(消息,距离):“”将获取消息并将其旋转到距离,以创建加密消息“”

encryption = ""
for ch in message:
    ordvalue = ord(ch)
    cipherValue = ordvalue + distance
    if cipherValue > ord("z"):
        cipherValue = ord("a") + distance - (ord("z") - ordvalue + 1)
    encryption += chr(cipherValue)
return encryption

def decrypt(消息,距离):“”“将解密上面的消息”“”

decryption = ""
for cc in message:
    ordvalue = ord(cc)
    decryptValue = ordvalue - distance
    if decryptValue < ord("a"):
        decryptValue = ord("z") - distance - (ord("a") - ordvalue - 1)
    decryption += chr(decryptValue)
return decryption

def binaryConversion(消息):“”“将把单词转换成二进制代码”“

binary = ""
for cb in message:
    binaryString = " " #Binary number
    binaryNumber = ord(cb)
    while binaryNumber > 0:
        binaryRemainder = binaryNumber % 2
        binaryNumber = binaryNumber // 2
        binaryString = str(binaryRemainder) + binaryString
    binary += binaryString
return binary

运行=真

#input 

message = input("Enter word to be encrypted: ") #original message
distance = int(input("Enter the distance value: ")) #distance letters will be moved

#variables

fancy = encrypt(message, distance)
boring = decrypt(fancy, distance)
numbers = binaryConversion(message)

#output
print("\n")
print("Your word was: ", format(message, ">20s"))
print("The distance you rotated was: ", format(distance), "\n")
print("The encryption is: ", format(fancy, ">16s"))
print("The decryption is: ", format(boring, ">16s"))
print("The binary code is: ", format(numbers)) #I know an error comes here but it will work in the end

repeat = input("Would you like to encrypt again? Y/N ")
print("\n")
if repeat == "N" or repeat == "n":
    run = False
else:
    run = True

共有1个答案

颜宸
2023-03-14

我建议您以映射的心态而不是偏移的心态来解决这个问题。您可以基于偏移量构建映射,但如果使用字典或其他形式的一对一映射,字符处理将更容易。

例如:

  offset = 5
  source = "abcdefghijklmnopqrstuvwxyz"
  target = source[offset:]+source[:offset]
  source = source + source.upper()
  target = target + target.upper()
  encrypt = str.maketrans(source,target)
  decrypt = str.maketrans(target,source)

  e = "The quick brown Fox jumped over the lazy Dogs".translate(encrypt)
  print(e)
  d = e.translate(decrypt)
  print(d)
 类似资料:
  • 基本上,我必须创建一个凯撒密码,它只是用一个int'k'以外的字母替换给出的每个字母。这需要2个命令行参数:“./caesar”和“k”,它们由用户提供。它工作得很好;但有一个问题: 它将“Barfoo”加密为“Eduirr”,使用3作为正确的密钥;将“Barfoo”加密为“Fevjss”,使用4作为正确的密钥 但是它不是用65作为密钥将“barfoo”加密为“onesbb”,而是将其加密为“oo

  • 我目前正在写一个凯撒密码程序在C#为我的任务,我有一个问题。 我使用一个数组来完成这个任务,在这个数组中,我存储了整个字母表,并声明了一个由数组中的字符索引定义的移位变量--这是一个for循环的迭代。移位计算在foreach循环中完成,该循环从文本文件中读取的字符串中提取字符。Foreach循环包含在for循环中,该循环迭代输出每个可能的移位。 然而,问题是,当我试图通过shift变量的值访问数组

  • 我需要编写一个python、hacker和wow这些单词的加密文本,并且使用不包括使用RAW_INPUT的python中的凯撒密码,距离为3。这是我到目前为止,但我不断得到一个错误消息,我不知道如何修复它。

  • 问题内容: 我通过java进行了凯撒密码,它可以运行,但是在用户输入密钥后不对任何内容进行加密! 这是我的代码 跑: 问题答案: 使用效率不是很高…您可以对值进行整数运算以获得其索引。 我在代码中添加了注释以解释更多信息,但这就是我想出的。 输出应该是这样的

  • 我写了一个程序,对字母表中字母对应的数字进行加密和解密,但我如何做到当我要求输入时,我将每个字母分配给它的数字,然后进行操作,打印信息的加密和解密,而不需要几行代码?这是我的程序: 我想能够只是输入一些类似“你好”,然后它将加密和解密的消息。