• 大小: 327KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: C/C++
  • 标签: 10级  参考  

资源简介

C语言编写,密码学实验,10级做的,可参考。

资源截图

代码片段和文件信息

//文件名:实验5
//作者:杜磊
//电子邮件地址:handsome9501@qq.com
//说明:实现sha对任意文件的hash 
//最后一次修改:2012年12月30日
#include    
#include 
#include 

typedef struct SHA1Context
{
  long Message_Digest[5]; //消息摘要
  long Length_Low; //消息比特长度
  long Length_High;
  short Message_Block_Index; //索引信息块
  char Message_Block[64]; //消息分组 
  int Computed;        //计算判断
  int Corrupted;           // 损坏判断
} SHA1Context;

class SHA1
{
public:

SHA1();
virtual ~SHA1();
enum SHA_ERROR
{
SHA_SUCCESS = 0 //正确状态
SHA_NULL = 1 //空指针参数
SHA_INPUTTOOLONG = 2 //输入过长判断
SHA_STATEERROR = 3 //输入结果判断
};

private:
static void SHA1ProcessMessageBlock(SHA1Context *context);
static void SHA1PadMessage(SHA1Context *context);
public:
static void SHA1Reset(SHA1Context* context);
static SHA_ERROR SHA1Input(SHA1Context* context const unsigned char* message_array unsigned length);
static SHA_ERROR SHA1Result(SHA1Context* context unsigned char Message_Digest[20]);
};

 int _loadfromfile(void* &outputbufferFILE *in_file)
{//载入文件至缓冲区并关闭文件返回文件大小
unsigned int filesize;
//计算文件长度
fseek(in_file0SEEK_END);
filesize=ftell(in_file);
rewind(in_file);//指针移动到文件头
outputbuffer=malloc(filesize);//分配缓冲区
fread(outputbuffer1filesizein_file);//读取文件内容进入缓冲区
fclose(in_file);//关闭输入文件
return filesize;
}

int  main(int argcchar *argv[])
{
 if(argc!=3)//容错处理
     { 
printf(“ Usage: SHA.exe inputfile hashvalfile\n“);
printf(“inputfile   : The file path you want to hash.\n“);
printf(“hashvalfile : The file path you want to store.\n“);
system(“pause“);
 return 0;
      }
bool flag=(argc==3);
unsigned char Digest[20];
unsigned int filesize;

void *buffer;
FILE *in_file;
FILE *out_file;

SHA1Context myContext;

if (!(in_file=fopen(argv[1]“rb“)))
{
printf(“文件打开失败!%s\n“argv[1]);
exit(1);
}  //以二进制打开文件
filesize=_loadfromfile(bufferin_file);
SHA1::SHA1Reset(&myContext);
SHA1::SHA1Input(&myContext(unsigned char*)bufferfilesize);
SHA1::SHA1Result(&myContextDigest);
//输出处理
if (flag&&!(out_file=fopen(argv[2]“w+“))) 
{
printf(“文件不能打开!%s\n“argv[2]);
}
printf(“%s\nSHA1的值为:“argv[1]);
    for(int i=0;i<5;i++)
{   
         for(int j=0;j<4;j++)   
{
if(flag)fprintf(out_file“%X“Digest[i*4+j]); //输出结果为 Rol_1 Rol_2 Rol_3 Rol_4 Rol_5 组合
printf(“%X“Digest[i*4+j]);
        }
    }
if(flag)
{
fclose(out_file);
}
if (!flag)
system(“pause“);
return 0;
  }   

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

     文件     369664  2012-12-25 16:22  20101120068 杜磊 lab5\实验五报告.doc

     文件      34304  2012-12-25 15:35  20101120068 杜磊 lab5\杜磊 5.exe

     文件       2721  2012-12-25 15:36  20101120068 杜磊 lab5\杜磊 5a.cpp

     文件       6491  2012-12-25 13:28  20101120068 杜磊 lab5\杜磊 5b.cpp

     目录          0  2012-12-25 16:23  20101120068 杜磊 lab5

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

               413180                    5


评论

共有 条评论