Практичная реалізація шифру енігма
K = ASC (MID $ (ss, i, 1)): IF k> 32 THEN k = k-128. FOR j = 0 TO 31: SWAP s (k, j), s (k, j + 1): NEXT. FOR j = 0 TO 31: SWAP s (k, j), s (k, j + 1): NEXT. S (k, j) = CHR $ ((ASC (set (k, j)) + 32) MOD 33). FOR j = 0 TO 32: SWAP s (i, j), s (i, 32 * RND): S (k, j) = CHR $ ((ASC (s (k, j)) + 32) MOD 33). K = ASC (s (i, n)): s (i, n) = CHR $ (m OR 64). FOR j = 0 TO 32: set (i, j) = CHR $ (j): NEXT. Читать ещё >
Практичная реалізація шифру енігма (реферат, курсовая, диплом, контрольная)
Підрахуємо число ключів такого шифру, реалізованого програмно. Нехай довжина періоду програмного генератора випадкових чисел дорівнює 2 ** 24. Вісім барабанів, що генеруються за допомогою цього генератора, дадуть разом 2 ** 192 варіантів ключа, а якщо врахувати ще варіанти псевдослучайной послідовності, що управляє рухом барабанів, то вийде чимала цифра в 2 ** 216 варіантів ключа. Таким чином, досить просто отримати стійкий шифр навіть при використанні програмного генератора випадкових чисел з періодом малої для криптографії довжини. Тому наведемо програму, що реалізовує описаний підхід.
Імітація Енігми.
DEFINT I-N: DEFSTR S.
CLS: RANDOM12E 231.
DIM s (4, 32) AS STRING * 1.
ns = 4.
ss = «ААААААААААААААААААААААААААААА '.
PRINT ss Шифрування.
x = RND (-231).
FOR i = 0 TO ns.
FOR j = 0 TO 32: set (i, j) = CHR $ (j): NEXT.
FOR j = 0 TO 32: SWAP s (i, j), s (i, 32 * RND):
NEXT.
NEXT.
s = «» .
FOR i = 1 TO LEN (ss) 'шифрування символу.
k = ASC (MID $ (ss, i, 1)): IF k> 32 THEN k = k-128.
FOR j = 0 TO ns: k = ASC (set (j, k)): NEXT.
IF k <32 THEN k = k + 128.
PRINT CHR $ (k);: S = s + CHR $ (k).
k = ns * RND 'поворот коліс.
FOR j = 0 TO 31: SWAP s (k, j), s (k, j + 1): NEXT.
FOR j = 0 TO 32.
s (k, j) = CHR $ ((ASC (set (k, j)) + 32) MOD 33).
NEXT.
NEXT.
PRINT.
Розшифрування.
x = RND (-231).
FOR i = 0 TO ns.
FOR j = 0 TO 32: s (i, j) = CHR $ (j): NEXT.
FOR j = 0 TO 32: SWAP s (i, j), s (i, 32 * RND): NEXT.
FOR j = 0 TO 32.
IF ASC (set (i, j)) <64 THEN.
m = j: n = ASC (s (i, j)).
DO.
k = ASC (s (i, n)): s (i, n) = CHR $ (m OR 64).
m = n: n = k.
LOOP UNTIL m = j.
END IF.
NEXT j.
FOR j = 0 TO 32.
s (i, j) = CHR $ (ASC (s (i, j)) AND 63).
NEXT.
NEXT i.
ss = s.
FOR i = 1 TO LEN (ss).
k = ASC (MID $ (ss, i, 1)): IF k> 32 THEN k = k-128.
FOR j = ns TO 0 STEP -1.
k = ASC (s (j, k)).
NEXT.
IF k <32 THEN k = k + 128.
PRINT CHR $ (k);
k = ns * RND 'поворот коліс.
FOR j = 0 TO 31: SWAP s (k, j), s (k, j + 1): NEXT.
FOR j = 0 TO 32.
s (k, j) = CHR $ ((ASC (s (k, j)) + 32) MOD 33).
NEXT.
NEXT i.
END.
Після роботи програми на екрані з’являться три рядки, що зображують: верхня — вихідний текст з букв А, середня — шифровку і нижня — розшифрований текст:
ААААААААААААААААААААААААААААА ВА ЖЖЬІХйЙЩСЛЦВФЕШЬРСОТСЗТИОБ ААААААААААААААААААААААААААААА.