资源简介
C语言编写,密码学实验,10级做的,可参考。
![](http://www.nz998.com/pic/40038.jpg)
代码片段和文件信息
//文件名:实验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++ 获得服务器端文件目录名
相关资源
- 合泰触摸单片机BS84B08C实际应用代码上
- ADS1256-STM32参考程序
- 新编Windows API参考大全.doc
- LVGL 英文参考手册
- C语言程序设计教材习题参考答案.do
- 《面向对象的程序设计语言——C++》
- c++语言程序设计第三版清华大学出版
- 新概念C++程序设计大学教程第2版张基
- C++数字水印完整系统参考
- 数据结构与算法分析C++语言描述第四
- UART串口通信论文参考
- C语言参考手册 第五版 PDF扫描无水印
- GDI+SDK参考文档
- C语言试题集-高清版含参考答案.pdf
- Visual_C++程序设计与应用教程课后答案
- MPEG-2视频编解码参考代码
- 参考文献管理系统(PowerBuuilderMySQLM
- C语言参考手册第五版(高清PDF中文版
- C++ STL参考手册
- Microsoft Win32 程序员参考大全5.pdf(6个
- QT实现的聊天界面,好友列表,支持文
- 计算机图形学大作业参考代码(VC版)
- 标准模板库自修教程与参考手册 STL进
- 对无线传感器网络(WSN)中参考广播
- stan参考手册
- WindowsAPI参考大全forCC++(chm)
- C++11教程参考书
- RDA5820技术资料参考源码
- C/C++参考手册大全5本集合.chm
- 清华大学郑莉C++课件 PPT及例题源码
评论
共有 条评论