Криптономикон, часть 2   ::   Стивенсон Нил

Страница: 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 След. >|

Java книги

Контакты: [email protected]