SHA1算法伪代码

来源:互联网 发布:淘宝用户数量2016 编辑:程序博客网 时间:2024/06/05 19:36
//本代码中所有运算均以4bytes为单位进行计算,数据块用首地址取4byte长表示void ft( BYTE *B , BYTE *C, BYTE *D, int t ){    if( 0 <= t <= 19 )        return (B AND C) or ((NOT B) AND D);    if( 20 <= t <= 39 )        return B XOR C XOR D;    if( 40 <= t <= 59 )        return (B AND C) or (B AND D) or (C AND D);    if( 60 <= t <= 79 )        return B XOR C XOR D;}void sha1( BYTE *input , int inbytlen , BYTE *output )       //inbylen 位input的byte长度{//para    BYTE K[16];    memcpy( K , "\x5A\x82\x79\x99" , 4); //(0 <= t <= 19)    memcpy( &K[4] , "\x6E\xD9\xEB\xA1" ,4) ; //(20 <= t <= 39)    memcpy( &K[8] , "\x8F\x1B\xBC\xDC" , 4); //(40 <= t <= 59)    memcpy( &K[12] , "\xCA\x62\xC1\xD6" , 4); //(60 <= t <= 79).//para end    BYTE tempA[4] , tempB[4] , tempC[4] , tempD[4], tempE[5] ; //4byte 为一个block,缓冲区1    BYTE temp2[20]; //缓冲区2    BYTE temp3[320]; //80个block  ,缓冲区3    BYTE temp4[4]; //1个block,缓冲区4    memcpy( temp2 , "\x67\x45\x23\x01", 4 );    memcpy( &temp2[4] , "\xEF\xCD\xAB\x89" , 4 )    memcpy( &temp2[8] , "\x98\xBA\xDC\xFE" , 4 )    memcpy( &temp2[12] , "\x10\x32\x54\x76" , 4)    memcpy( &temp2[16] , "\xC3\xD2\xE1\xF0" , 4)    for( int i = 0 ; i < inbylen /64 ; i ++ )    {        memcpy( temp3 , input[i*64] , 64 );        for( int j = 16 ; j < 80 ; j++ )        {            memcpy( &temp3[ j * 4 ] , ( temp3[(j-3)*4] XOR temp3[(j-8)* 4 ] XOR temp3[(j-14) * 4] XOR temp3[(j-16) * 4] )<<<1  ); // <<

代码为伪代码
语法未经调试
仅供参考
欢迎指正

原创粉丝点击