[Tokyo.pm] md5 "8"liner

hiroyuki oyama oyama @ crayfish.co.jp
2000年 11月 16日 (木) 18:50:11 CST


クレイフィッシュの小山です。

Adam Back氏のWeb-siteにRC5やMD5, SHA等の暗号やメッセージダ
イジェストアルゴリズムをPerl等でコンパクトに実装した物が掲
載されています。ちなみにMD5を8行のperl5のスクリプトで処理
する物は

#!/bin/perl -iH9T4C`>_-JXF8NMS^$#)4=@<,$18%"0X4!`L0%P8*#Q4``04``04#!P`` ~JLA
@A=unpack N4C24,unpack u,$^I;@K=map{int abs 2**32*sin$_}1..64;sub L{($x=pop)
<<($n=pop)|2**$n-1&$x>>32-$n}sub M{($x=pop)-($m=1+~0)*int$x/$m}do{$l+=$r=read
STDIN,$_,64;$r++,$_.="\x80"if$r<64&&!$p++;@W=unpack V16,$_."\0"x7;$W[14]=$l*8
if$r<57;($a,$b,$c,$d)=@A;for(0..63){$a=M$b+L$A[4+4*($_>>4)+$_%4],M&{(sub{$b&$c
|$d&~$b},sub{$b&$d|$c&~$d},sub{$b^$c^$d},sub{$c^($b|~$d)})[$z=$_/16]}+$W[($A[
20+$z]+$A[24+$z]*($_%16))%16]+$K[$_]+$a;($a,$b,$c,$d)=($d,$a,$b,$c)}$v=a;for(
@A[0..3]){$_=M$_+${$v++}}}while$r>56;print unpack H32,pack V4, @ A # RSA's MD5

ってな感じです。
  http://www.cypherspace.org/~adam/rsa/md5.html

ただ、このまま使用を試みると、
  Can't emulate -~ on #! line at ./MD5 line 1.

等とおこられます。(v5.6.0 built for sun4-solaris)
しかし行頭の
  ~JLA

を削ると正しく(多分)動作しているように見えます。
# 一応 Digest::MD5 と比較検証しました。

#!/bin/perl -iH9T4C`>_-JXF8NMS^$#)4=@<,$18%"0X4!`L0%P8*#Q4``04``04#!P``
@A=unpack N4C24,unpack u,$^I;@K=map{int abs 2**32*sin$_}1..64;sub L{($x=pop)
<<($n=pop)|2**$n-1&$x>>32-$n}sub M{($x=pop)-($m=1+~0)*int$x/$m}do{$l+=$r=read
STDIN,$_,64;$r++,$_.="\x80"if$r<64&&!$p++;@W=unpack V16,$_."\0"x7;$W[14]=$l*8
if$r<57;($a,$b,$c,$d)=@A;for(0..63){$a=M$b+L$A[4+4*($_>>4)+$_%4],M&{(sub{$b&$c
|$d&~$b},sub{$b&$d|$c&~$d},sub{$b^$c^$d},sub{$c^($b|~$d)})[$z=$_/16]}+$W[($A[
20+$z]+$A[24+$z]*($_%16))%16]+$K[$_]+$a;($a,$b,$c,$d)=($d,$a,$b,$c)}$v=a;for(
@A[0..3]){$_=M$_+${$v++}}}while$r>56;print unpack H32,pack V4, @ A # RSA's MD5


行頭の記述は何の為の物なんでしょう?

SEE ALSO
  http://www.cypherspace.org/~adam/
  http://www.cypherspace.org/~adam/rsa/
______________
Hiroyuki Oyama <oyama @ crayfish.co.jp>
System operations Dept.
Crayfish Co.,Ltd. <http://Crayfish.CO.JP/>
   Prepared "Object-oriented with Perl" Mailing list.
   -> http://perl.infoware.ne.jp/



Tokyo-pm メーリングリストの案内