使用Playfair密码。我有两组字符:一个关键字和字母表的其余部分,没有关键字中的字符。示例(由于Playfair密码的性质,'i'不考虑使用25个字符,非常适合5x5 matrx):
keyword = 'keyword'
alphabet = 'abcfghjlmnpqstuvxz'
我有一个空的5x5矩阵,我需要填写,首先是键盘,然后是字母表的其余部分。使用此关键字,矩阵应如下所示:
[k, e, y, w, o]
[r, d, a, b, c]
[f, g, h, j, l]
[m, n, p, q, s]
[t, u, v, x, z]
这就是我试图插入关键字字符的方式但是我从这里停留了。当这个嵌套循环完成时,矩阵填充0:
#uniquechars is the keyword
uniqueLen = len(uniqueChars)
keywordCounter = 0
for i in range(0, 5):
for j in range(0, 5):
while keywordCounter < uniqueLen:
#print('keywordCounter: ', keywordCounter)
#print('uniqueLen: ', uniqueLen)
#print(uniqueChars[keywordCounter])
matrix[i][j] = uniqueChars[keywordCounter]
keywordCounter = keywordCounter + 1
#print(matrix[i][j])
而且我不知道如何在那里获得剩下的字母。
有什么想法吗?
答案 0 :(得分:1)
您可以只连接字符串,然后按顺序迭代它。然后使用floor操作//
和模运算符%
来获取矩阵中的正确索引。
>>> keyword = 'keyword'
>>> alphabet = 'abcfghjlmnpqstuvxz'
>>>
>>> # Make an empty matrix -- could also use numpy chararray for this, but
>>> # this is good enough for this example.
>>> matrix = [[None] * 5 for i in range(5)]
>>>
>>> full_string = keyword + alphabet
>>>
>>> for i in range(25):
... matrix[i // 5][i % 5] = full_string[i]
>>>
>>> for row in matrix:
... print(row)
['k', 'e', 'y', 'w', 'o']
['r', 'd', 'a', 'b', 'c']
['f', 'g', 'h', 'j', 'l']
['m', 'n', 'p', 'q', 's']
['t', 'u', 'v', 'x', 'z']