Рэнди надевает пиджак и галстук. Годятся любые предлоги, чтобы оттянуть время, поэтому он проверяет почту.
Кому: [email protected]
Тема: Трансформация «Понтифик», как обещано
Рэнди.
Разумеется, Вы правы — как немцы убедились на горьком опыте, ни одной криптосистеме нельзя доверять, пока она не обнародована, чтобы люди вроде Ваших друзей попытались ее взломать. Буду очень признателен, если Вы сделаете это с «Понтификом».
В «Понтифик» заложены некоторые асимметрии и особые операторы выбора, которые трудно выразить в нескольких элегантных математических строчках. Он почти просится, чтобы его записали псевдокодом. Но зачем сочинять псевдо, если можно написать настоящий? Ниже прилагается программа «Понтифика» на языке Perl. Переменная $D содержит 54-элементную перестановку. Подпрограмма е генерирует следующий элемент ключевого потока, изменяя этим $D.
#!/usr/bin/perl — s
$f=$d? — 1:1;$D=pack(‘C*’.33..86);$p=shift;
$p=~y/a-z/A-Z/;$U=’$D=~s/(.*)U$/U$1/;
$D=~s/U(.)/$1U/;’;($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($&)-l3)%26+65)/eg;
$o=~s/X*$// if $d;$o=~s/.{5}/$& /g;
print"$o
"; sub v{$v=ord(substr($D,$_[0]))-32;
$v>53?53:$v}
sub w{$D=~s/(.{$_[0]})(.*)(.)/$2$1$3/}
sub e{eval"$U$V$V";$D=~s/(.*)([UV].*[UV])(.*)/$3$2$l/;