MD5 by notogawa

import Bits
import Text.Printf
m@main=do s<-getLine;putStrLn$zipWith(+)z(foldl(\(a:b:c:d:_)n->[d,b+(a+[b&c.|.r b&d,d&b.|.r d&c,b#c#d,c#(b.|.r d)]!!(n%16)+g(take 56(o s++f 128)++f(8*length s))!!mod(mod(n%16^5)9+mod(n%16^5*4)7*n+n)16+floor(2^32*abs(sin$[1..]!!n)))`rotate`o"GLQVEINTDKPWFJOU"!!(4*n%16+n&3),b,c])z[0..63])>>=take 4.f>>=printf"%02x";m
r=(-1-)
(#)=xor
(&)=(.&.)
(%)=div
f x=x&255:f(x%256)
g(a:b:c:d:x)=2^24*d+2^16*c+2^8*b+a:g x
z=g$[1,35..239]++[254,220..]
o=map fromEnum

Note that non-ascii characters in the above source code will be escaped (such as \x9f).

download

return to the top page