我正在开发一个关于“替代密码”的项目
我得到了我的“钥匙”,这是一系列数字,如:
a = {12,31,42,1,23,-12,...}
我的明文是“abcdef”,然后是ord (plain text) = {97,98,99,100,101,102}
基本上我想要做的是将相应的密钥添加到我的纯文本中。
也就是说,当纯文本为"a"
时,它是第0个字母,因此我想在我的ord“a”中添加第0个密钥(即12个)。当纯文本为"b"
时,它是第1个字母,因此我在此纯文本中添加第1个密钥以获取密文。等等。
我该如何开始?
答案 0 :(得分:1)
您可以使用zip()
配对多个列表的元素:
key = (12, 31, 42, 1, 23, -12) # a tuple
inputstring = 'abcdef'
for char, keyval in zip(map(ord, inputstring), key):
# do something with the char ordinal and the key value.
这个确实假设你的密钥至少和输入字符串一样长。
如果您的输入键具有固定长度并且您想要重复使用它,则可以使用itertools.cycle()
function重复循环键并将键值与字符串配对,直到您用完为止。字符串中的字符:
from itertools import cycle
key = (12, 31, 42, 1, 23, -12) # a tuple
inputstring = 'abcdefghijkl'
for char, keyval in zip(map(ord, inputstring), cycle(key)):
# do something with the char ordinal and the key value.
演示:
>>> from itertools import cycle
>>> key = (12, 31, 42, 1, 23, -12)
>>> inputstring = 'abcdefghijkl'
>>> for char, keyval in zip(map(ord, inputstring), cycle(key)):
... print char, keyval
...
97 12
98 31
99 42
100 1
101 23
102 -12
103 12
104 31
105 42
106 1
107 23
108 -12
这里键值重复,因为它们与输入字符串的序数配对。
答案 1 :(得分:1)
正如Martijn指出的那样,你使用的set
概念({}
)没有维护顺序,你可能想使用列表符号([]
)或元组符号({{1 }})。现在,我们可以在字符串上使用枚举来获取索引和字符串中的相应字符。我们可以在密码表上使用相同的索引来获取相应的数字。
()
<强>输出强>
a = [12,31,42,1,23,-12]
plainString, lenA = "abcdef", len(a)
for index, char in enumerate(plainString):
print char, ord(char), a[index % lenA]