如何使用随机密钥执行凯撒密码逻辑?

时间:2018-09-02 11:03:48

标签: python-2.7

我想让用户输入消息。然后,我使用python中的random包生成了一个随机密钥。
但是如何使用键的 ascii 值移动消息中的每个字母以仅将输出作为字符串生成? 示例:

message = hi   
random key generated = bi  
encrypted message = "something in alphabets only like xh or mo."

1 个答案:

答案 0 :(得分:0)

使用objectype词典将每个字符映射到另一个字符,以便创建新的字母,然后遍历字典并使用字典替换它们

stringa = input()
swapa = {"A":"Q", "B":"A","C":"L"...}
for i in swapa:
    stringa = stringa.replace(i,swapa[i])
print(stringa)

您还可以更进一步,使用关键字加密和解密

ite = int(input())
    for itar in range(ite):
    keyw = list(input())
    # removes dublicates and keep order
    rem = set()
    for i in keyw:
        if keyw.count(i) > 1:
            rem.add(i)
    for i in rem:
        keyw= keyw[::-1]
        keyw.remove(i)
        keyw= keyw[::-1]
    keyw = "".join(keyw)
    # sets up alfabet
    linaalfa = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    linaalfa += " "*(len(keyw)-len(linaalfa)%len(keyw)) # adds spaces on the last line
    linaalf = "".join([i for i in linaalfa if i not in keyw]) # removes dublicates
    linaalf1 = [keyw]+[linaalf[x:x+len(keyw)] for x in range(0,len(linaalf),len(keyw))]
    # alfa order find
    order = dict()
    for w,i in enumerate(sorted(keyw)):
        order[keyw.index(i)] = w
    # order in alfa ordder
    orderalfa = ["".join([i[q] for i in linaalf1]) for q in range(len(keyw))] # now read by column
    temp = [""]*len(orderalfa)
    for w,i in enumerate(orderalfa):
        temp[order[w]] = i
    orderalfa = temp
    orderalfa = "".join([x.strip() for x in orderalfa])
    # relate to base alfabet
    translate = dict()
    encrypt = dict()
    for w,i in enumerate(orderalfa):
        translate[i] = linaalfa[w]
        encrypt[linaalfa[w]] = i
    # trans late message
    lina = input().split()
    outa = list()
    for i in lina:
        temp = ""
        for q in i:
            temp += translate[q]
        outa.append(temp)
    print(" ".join(outa))

这里需要输入

n # number of quaries
keyword
string that need to be operated

但是,如果您希望将其加密,则将最后一位设置为解密消息,您需要替换行

temp += translate[q]

temp += encrypt[q]

这需要一个关键字,并且

  1. 删除该关键字中的重复字母

  2. 在关键字(普通关键字)前面设置关键字

  3. 并以与关键字相同的长度和平地拆分alfabet

  4. 将它们放置在彼此上方

  5. 根据关键字的字母是否按字母顺序书写,按列顺序对其进行排序

  6. 获取每个大括号并根据连续放置的每个大括号创建一个新字母

  7. 此新字母现在可以用作新字母

例如,如果新字母的开头为“ HGJ”,则A为H,B为G,J为C。

这只是单字母加密。