little endian用MD5。もう少し縮みそうな気もするが。

#include <stdio.h>
double sin(),fabs();char D[64]={128},b[128];unsigned s[4],X[16],C[2],x,y,z,w,E[
]={0x67452301,0xefcdab89,0x98badcfe,271733878};i,j,k,l,m,n,t,u;main(a,v)char**v
;{FILE*f=fopen(v[1],"rb");do{l=n=fread(b,1,u=64,f);C[1]+=((*C+=l*8)<l*8)+l>>29;
if(l-u){for(i=*C/8%u,j=i<56?56:120,i=j-i;i--;b[l+i]=D[i]);l=j+8;memcpy(b+j,C,8)
;}for(m=0;m<l;m+=u){memcpy(X,b+m,u);for(i=4;i--;s[i]=E[i]);for(j=0;j<4;j++)for(
i=-1,k="@AE@"[j];++i<16;k+="AECG"[j])w=t=(16-i)%4,x=s[++w%4],y=s[++w%4],z=s[++w
%4],y=s[t]+(j-3?j-2?j-1?x&y|~x&z:x&z|y&~z:x^y^z:y^(x|~z))+(w=fabs(sin(j*16+1.+i
))*(~0U+1.))+X[k=(k-u)%16],z="GLQVEINTDKPWFJOU"[j*4+i%4]-u,s[t]=x+(y<<z|y>>32-z
);for(i=4;i--;E[i]+=s[i]);}}while(n==u);for(memcpy(b,E,16);i<15;)printf("%02x",
b[++i]&255);}