我无法获得正确的代码输出。给定键顺序,我想按该顺序读取列。对于前。如果我有[4,2,3,1],我会读第一列最后,第二列第二,第三列第三,最后一列。数字本身是顺序,索引是列号。
我已经基于密钥的长度创建了一个矩阵。在其余位置填充“ -1”
col = len(key_order)
# calculate maximum row of the matrix
row = int(math.ceil(len(text) / col))
fill_null = int((row * col) - msg_len)
msg_lst.extend('-1' * fill_null)
matrix = [msg_lst[i: i + col]
for i in range(0, len(msg_lst), col)]
# read matrix column-wise
for i in range(col):
current_index = key_order[i]
ciphertext += ''.join([row[current_index]
for row in matrix])
以上工作。但是,仅当键具有不同的值时,它才有效。我们可能会得到测试用例,其中键具有重复项,例如5623143,我必须水平而不是垂直读取值。关于如何获取我的代码的任何指示?在这里有更好的解释:http://www.crypto-it.net/eng/simple/myszkowski-transposition.html?tab=1
Key: 5623143
text:A Midsummer Nights Dream
matrix would look like: [['A', 'M', 'I', 'D', 'S', 'U', 'M'], ['M', 'E', 'R', 'N', 'I', 'G', 'H'], ['T', 'S', 'D', 'R', 'E', 'A', 'M']]
correct result: SIEIRDDMNHRMUGAAMTMES
my result: SIEUGAMESIRDAMTDNRIRD