`
java-mans
  • 浏览: 11343989 次
文章分类
社区版块
存档分类
最新评论

《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希

 
阅读更多

使用Crypto++MD5算法对字符串进行哈希,先在VS2010中新建Win32 Console Application,取工程名为:Crypto-MD5。在工程主目录中新建文件夹include,将Crpyto++的头文件放进去,在同一目录新建lib文件夹,在lib文件夹中再建两个文件夹DebugRelease,之后将Crypto++的调试版和发布版cryptlib.lib分别放到前面两个文件夹中。

打开工程Crypto-MD5.cpp文件,修改添加代码如下:

==========================Crypto-MD5.cpp====================

#include "stdafx.h"

#include "../include/md5.h"

#include <iostream>

#include <sstream>

#ifdef _DEBUG

#pragma comment(lib, "../lib/Debug/cryptlib.lib")

#else

#pragma comment(lib, "../lib/Release/cryptlib.lib")

#endif

int _tmain(int argc, _TCHAR* argv[])

{

std::string instr;

byte m[16];

std::cout<<"输入字符串:"<<std::endl;

std::cin>>instr;

int len = instr.length();

byte *message = new byte[len];

std::stringstream stream;

stream << instr;

stream >> message; //将输入std::string类型字符串转为byte类型字符数组

CryptoPP::MD5 md5;

//md5.CalculateDigest(m, message, len); //等价于下面两行代码只和

md5.Update(message, len); //注意,此处len必须是message的字符长度,

//否则生成的哈希值会一次一变

md5.Final(m);

std::cout<<"算法名称:"<<md5.AlgorithmName()<<std::endl;

std::cout<<"哈希后结果:";

for(int i=0; i<16; i++)

printf("%02x", m[i]);

std::cout<<std::endl;

system("pause");

return 0;

}

代码中首先生成MD5实例对象,调用方法Update()Final(),这是两个定义在基类HashTransformation中的函数。函数原型如下:(详见cryptlib.h文件)

//! process more input

virtual void Update(const byte *input, size_t length) =0;

//! compute hash for current message, then restart for a new message

/*! /pre size of digest == DigestSize(). */

virtual void Final(byte *digest)

{TruncatedFinal(digest, DigestSize());}

Update()函数是用来处理输入的;参数input是将要计算哈希值的字符串,length是该字符串的长度。

Final()函数是计算当前消息的哈希值并重新开始新的消息的;参数digest是用来存放哈希值的byte型数组。

HashTransformation类还定义了函数CalculateDigest()来替换上面的Update()Final()这两个函数,原型如下:

//! use this if your input is in one piece and you don't want to call Update() and Final() separately

virtual void CalculateDigest(byte *digest, const byte *input, size_t length)

{Update(input, length); Final(digest);}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics