《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希
使用Crypto++的MD5算法對(duì)字符串進(jìn)行哈希,先在VS2010中新建Win32 Console Application,取工程名為:Crypto-MD5。在工程主目錄中新建文件夾include,將Crpyto++的頭文件放進(jìn)去,在同一目錄新建lib文件夾,在lib文件夾中再建兩個(gè)文件夾Debug和Release,之后將Crypto++的調(diào)試版和發(fā)布版cryptlib.lib分別放到前面兩個(gè)文件夾中。
打開(kāi)工程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類型字符串轉(zhuǎn)為byte類型字符數(shù)組
?
???????? CryptoPP::MD5 md5;
???????? //md5.CalculateDigest(m, message, len); //等價(jià)于下面兩行代碼只和
???????? md5.Update(message, len); //注意,此處len必須是message的字符長(zhǎng)度,
//否則生成的哈希值會(huì)一次一變
???????? md5.Final(m);
???????? std::cout<<"算法名稱:"<<md5.AlgorithmName()<<std::endl;
???????? std::cout<<"哈希后結(jié)果:";
???????? for(int i=0; i<16; i++)
?????????????????? printf("%02x", m[i]);
???????? std::cout<<std::endl;
?
???????? system("pause");
???????? return 0;
}
?
代碼中首先生成MD5實(shí)例對(duì)象,調(diào)用方法Update()和Final(),這是兩個(gè)定義在基類HashTransformation中的函數(shù)。函數(shù)原型如下:(詳見(jiàn)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()函數(shù)是用來(lái)處理輸入的;參數(shù)input是將要計(jì)算哈希值的字符串,length是該字符串的長(zhǎng)度。
Final()函數(shù)是計(jì)算當(dāng)前消息的哈希值并重新開(kāi)始新的消息的;參數(shù)digest是用來(lái)存放哈希值的byte型數(shù)組。
HashTransformation類還定義了函數(shù)CalculateDigest()來(lái)替換上面的Update()和Final()這兩個(gè)函數(shù),原型如下:
//! 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);}
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/android-html5/archive/2010/08/31/2533990.html
總結(jié)
以上是生活随笔為你收集整理的《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 四大数据库的比较(SQL Server、
- 下一篇: 基于silerlight for emb