Шифры вертикальной перестановки
Шифр простой вертикальной перестановки
Дано: • открытый текст • ключ – количество символов в горизонтали abc de fg 3 a b c d e f g * * Требуется получить: • шифртекст adgbe*cf*
• количество столбцов: n • колличество строк: length(s) div n +1 • считывание по столбцам: буквы с номерами – 1, 4, 7 (mod n=1, div n=1, 2, 3) – 2, 5, ? (mod n=2, div n=1, 2, ? ) – 3, 6, ? (mod n=0, div n=1, 2, ? ) • недостающие буквы заменяются «*» abc de fg 3 a b c d e f g * * adgbe*cf*
s 1: =''; for i: =1 to n do { по количеству столбцов} for j: =1 to (length(s) div n) +1 do { по количеству строк} if (j-1)*n+i <= length(s) { если номер символа есть в строке } then s 1: =s 1+s[(j-1)*n+i] else s 1: =s 1+'*'; { иначе берем «*» }
Шифр двойной вертикальной перестановки
Дано: • открытый текст • ключ – количество символов в горизонтали • перестановка столбцов • перестановка строк Требуется получить: шифртекст abc de fg 3 321 231 1 2 3 3 2 1 a b c d e f g * * 1 с b a 2 f e d 3 * * g 2 f e d 3 c b a 1 * * g f *ce *bdga
• перестановки - 2 массива по n чисел • Вместо номеров «строки» и «столбца» берем номера соответствующих перестановок
s 1: =''; for i: =1 to n do for j: =1 to (length(s) div n) +1 do if (b[j]-1)*n+a[i]<=length(s) then s 1: =s 1+s[(b[j] - 1)*n+a[i]] else s 1: =s 1+'*';