SHA1算法伪代码

//本代码中所有运算均以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  ); // <<
    
    

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值