Страница:
82 из 145
Разумеется, Вы правы — как немцы убедились на горьком опыте, ни одной криптосистеме нельзя доверять, пока она не обнародована, чтобы люди вроде Ваших друзей попытались ее взломать. Буду очень признателен, если Вы сделаете это с «Понтификом».
В «Понтифик» заложены некоторые асимметрии и особые операторы выбора, которые трудно выразить в нескольких элегантных математических строчках. Он почти просится, чтобы его записали псевдокодом. Но зачем сочинять псевдо, если можно написать настоящий? Ниже прилагается программа «Понтифика» на языке Perl. Переменная $D содержит 54-элементную перестановку. Подпрограмма е генерирует следующий элемент ключевого потока, изменяя этим $D.
#! /usr/bin/perl — s
$f=$d? -l:l; $D=pack(`C*´'.33..86); $p=shift;
$p=~y/a-z/A-Z/; $U=´$D=~s/(.*)U$/U$l/;
$D=~s/U(.)/$lU/; ´; ($V=$U)=~s/U/V/g;
$p=~s/[A-Z]/$k=ord($&)-64, &e/eg; $k=0;
while(<>){y/a-z/A-Z/; y/A-Z//dc; $o.=$_}$o.=´X´
while length ($o)%5&&! $d;
$o=~s/./chr(($f*&e+ord($&)-13)%26+65)/eg;
$o=~s/X*$// if $d; $o=~s/.{5}/$& /g;
print»$o\n»;
sub v{$v=ord(substr($D, $_[0]))-32;
$v>53? 53:$v}
sub w{$D=~s/(.{$_[0]})(.*)(.)/$2$l$3/}
sub e{eval»$U$V$V»; $D=~s/(.*)([UV].*[UV])(.*)/$3$2$1/;
&w(&v(53)); $k? (&w($k)):($c=&v(&v(0)) , $c>52? &e:$c)}
Еще одно письмо — от адвокатши, которая занимается разделом имущества с Чарлин. Рэнди распечатывает его и кладет в карман, чтобы посмаковать на досуге, когда будет стоять в пробке. Спускается вниз, ловит такси до гостиницы «Манила». Если бы он впервые ехал по Маниле, то, наверное, считал бы, что переживает захватывающее приключение; однако это уже миллионная его поездка, и мозг ничего не регистрирует. Например, он видит два столкнувшихся автомобиля прямо под огромным указателем «НЕТ ПОВОРОТА», но не обращает внимания.
|< Пред. 80 81 82 83 84 След. >|