我想让用户输入消息。然后,我使用python中的random
包生成了一个随机密钥。
但是如何使用键的 ascii 值移动消息中的每个字母以仅将输出作为字符串生成?
示例:
message = hi
random key generated = bi
encrypted message = "something in alphabets only like xh or mo."
答案 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]
这需要一个关键字,并且
删除该关键字中的重复字母
在关键字(普通关键字)前面设置关键字
并以与关键字相同的长度和平地拆分alfabet
将它们放置在彼此上方
根据关键字的字母是否按字母顺序书写,按列顺序对其进行排序
获取每个大括号并根据连续放置的每个大括号创建一个新字母
此新字母现在可以用作新字母
例如,如果新字母的开头为“ HGJ”,则A为H,B为G,J为C。
这只是单字母加密。