资源简介
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
- 上一篇:软件学院密码学实验四
- 下一篇:网络编程c++ 获得服务器端文件目录名
相关资源
- 软件学院密码学实验四
- 卡尔曼滤波和互补滤波参考程序
- 基于MFC编写的读写USB_HID设备数据程序
- 第八届蓝桥杯省赛软件类C语言B组原题
- 端口转发-c++一个不错的参考
- 国密SM4的5种加密模式(ECB CBC CFB OFB
- C语言参考手册 C标准 (内含6个chm格式
- C/C++库函数参考手册中文版
- 新编Windows API参考大全全中文、win32
- libevent源码深度剖析 + libevent参考手册
- c语言参考手册.rar(内含3个chm格式手
- C语言库函数查询手册.chm
- arduino GCode_Interpreterdc G代码解释器 也
- FreeRTOS 官方 参考手册 英文
- STM32参考手册中文.pdf
- STM32F103中文教程及参考手册.pdf
- 《c语言参考手册》pdf
- 电子万年历Proteus仿真+源代码+原理图
- 2018版《计算机网络原理》习题参考答
- OpenCV函数参考手册(中文版).pdf
- 《C++面向对象程序程序设计》一书中
- 国密SM4的5种加密模式(ECB CBC CFB OFB
- C++ 参考手册/C语言参考手册.chm
- 谭浩强C语言程序设计习题参考解答
- STL参考手册
- 3GPP AMR-WB+的参考代码
- C++物流管理系统(功能结构图+源代码
- 数据结构第五章作业答案参考C语言
- 数据结构第二章作业答案参考C语言
- 数据结构第一章作业答案参考C语言
评论
共有 条评论