У меня проблемы с получением правильного вывода кода. Учитывая порядок ключей, я хочу прочитать столбцы в этом порядке. Напримересли бы у меня было [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