• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签: sha1  

资源简介

全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要

资源截图

代码片段和文件信息

/*  sha1.c  */
/*  以下所用各种参量名称皆为sha-1在出版物上所用之公用名称  */
 #include “sha1.h“

/*
 *  以下是为 SHA1 向左环形移位宏 之定义
 */
#define SHA1CircularShift(bitsword) \
                (((word) << (bits)) | ((word) >> (32-(bits))))


/* 局部函数原型 */
void SHA1PadMessage(SHA1Context *);    /*  定义填充信息指针  */
void SHA1ProcessMessageBlock(SHA1Context *);

/*
 *  SHA1Reset
 *  
 *  以下为数据初始化之操作
 *  Parameters:(参数设置)
 *  context: [in/out]
 *  The context to reset.
 *
 */
int SHA1Reset(SHA1Context *context)
{
    if (!context)
    {
        return shaNull;
    }

    context->Length_Low             = 0;
    context->Length_High            = 0;
    context->Message_Block_Index    = 0;

    context->Intermediate_Hash[0]   = 0x67452301;
    context->Intermediate_Hash[1]   = 0xEFCDAB89;
    context->Intermediate_Hash[2]   = 0x98BADCFE;
    context->Intermediate_Hash[3]   = 0x10325476;
    context->Intermediate_Hash[4]   = 0xC3D2E1F0;

    context->Computed   = 0;
    context->Corrupted  = 0;
    return shaSuccess;
}

/*
 *  SHA1Result
 *
 *  以下为sha-1结果描述:
 *:
 *  该算法将会返回一个160比特的消息摘要队列
 *
 *  或者输出计算错误
 *
 */
int SHA1Result( SHA1Context *context
                uint8_t Message_Digest[SHA1HashSize])
{
    int i;

    if (!context || !Message_Digest)
    {
        return shaNull;
    }

    if (context->Corrupted)
    {
        return context->Corrupted;
    }

    if (!context->Computed)
    {
        SHA1PadMessage(context);
        for(i=0; i<64; ++i)
        {
            /* 消息清零 */
            context->Message_Block[i] = 0;
        }
        context->Length_Low = 0;    /* 长度清零 */
        context->Length_High = 0;
        context->Computed = 1;
    }

    for(i = 0; i < SHA1HashSize; ++i)
    {
        Message_Digest[i] = context->Intermediate_Hash[i>>2]
                            >> 8 * ( 3 - ( i & 0x03 ) );
    }

    return shaSuccess;
}

/*
 *  以下为sha-1输入描述:
 *
 *  接收单位长度为8字节倍数的消息
 *
 */
int SHA1Input(    SHA1Context    *context
                  const uint8_t  *message_array
                  unsigned       length)
{
    if (!length)
    {
        return shaSuccess;
    }

    if (!context || !message_array)
    {
        return shaNull;
    }

    if (context->Computed)
    {
        context->Corrupted = shaStateError;
        return shaStateError;
    }

    if (context->Corrupted)
    {
         return context->Corrupted;
    }
    while(length-- && !context->Corrupted)
    {
    context->Message_Block[context->Message_Block_Index++] =
                    (*message_array & 0xFF);

    context->Length_Low += 8;
    if (context->Length_Low == 0)
    {
        context->Length_High++;
        if (context->Length_High == 0)
        {
            /* Message is too long */
            context->Corrupted = 1;
        }
    }

    if (context->Message_Block_Index == 64)
    {
        SHA1ProcessMessageBlock(context);
    }

    message_array+

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7178  2009-04-25 17:27  sha1\sha1.c

     文件       1277  2009-05-12 10:24  sha1\sha1.h

     文件       3246  2009-05-12 10:28  sha1\sha1test.c

     文件       7036  2009-05-12 10:27  sha1\stdint.h

     目录          0  2010-04-10 12:24  sha1

----------- ---------  ---------- -----  ----

                18737                    5


评论

共有 条评论