- 665 名前:デフォルトの名無しさん mailto:sage [02/08/24 02:49]
- SHA1(>663)の続きだが、漏れはそろそろ限界
でもbig endian用がinclude以外は7行に逝ったからいいや >little endian用 #include <stdio.h> size_t*p,H[186]={0x67452301,0xefcdab89,0x98badcfe,271733878,0xc3d2e1f0},n,d,z,l ,h;L(c){((char*)p=H+90)[3^n++]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[ 8]^p[2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[ 2],c=p[3],p[-1]=p[4]+(*p<<5|*p>>27)+H[185-z]+0x5a827999+(z/20&1?z>59?d&(n^c)^c: 882459459+(d&(n|c)|n&c):(z>39?341275144:0x6fe0483d)+(d^n^c));for(;z=n=H-p--;)*p +=p[5];}}S(a){for(z=4;z;)L(a>>--z*8);}main(a,v)char**v;{FILE*f=fopen(v[1],"rb") ;for(;~(a=getc(f));h+=!(l+=8))L(a);for(L(128);n-56;)L(0);for(S(h),S(l);z<5;) printf("%08x",H[z++]);} >big endian用 #include <stdio.h> size_t*p,H[186]={19088743,0x89abcdef,0xfedcba98,0x76543210,0xf0e1d2c3},n,d,z,l, h;L(c){n++[(char*)p=H+90]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[8]^p[ 2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[2],c= p[3],p[-1]=p[4]+(*p<<5|*p>>27)+(z/20&1?z>59?d&(n^c)^c:882459459+(d&(n|c)|n&c):( z>39?341275144:0x6fe0483d)+(d^n^c))+H[185-z]+0x5a827999;for(;z=n=H-p--;)*p+=p[5 ];}}main(a,v)char**v;{FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))L(a) ;for(L(128);n-56;)L(0);p[14]=h;n=63;for(L(p[15]=l);z<5;)printf("%08x",H[z++]);}
|

|