使用Crypto++的MD5算法对字符串进行哈希,先在VS2010中新建Win32 Console Application,取工程名为:Crypto-MD5。在工程主目录中新建文件夹include,将Crpyto++的头文件放进去,在同一目录新建lib文件夹,在lib文件夹中再建两个文件夹Debug和Release,之后将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);}
分享到:
相关推荐
asce1885-blogasce1885的博客
希望大家能用得着这个东西!检索时很有用啊
此为ASCE的第三代基准模型代码,可供土木工程领域学者使用。
ASCE7-10-建筑物和其他结构最小设计荷载-中文版.pdf
PHASE II OF THE ASCE BENCHMARK STUDY ON SHM
ASCE是土木工程学会的重要期刊。国外期刊投稿主要是latex,该期刊有Latex的投稿模板。
土木工程几个著名期刊ASCE和Science direct中输出格式
mfc工程,一个可以编辑,选择能实现众多功能的list控件示范工程,
ASCE全文数据库培训iGroup公司.ppt
ASCE-7-2005-美国荷载规范-(中文版)
“使用粒子群算法对结构钢的连续循环本构模型进行校准”,ASCE工程力学杂志。 143(5):04017012. DOI:10.1061 /(ASCE)EM.1943-7889.0001214 关于此仓库: 最初由Chris Smith(2013)开发。 他的原始代码可以在...
针对美国IASC-ASCE的结构健康监测科研组提出的基准结构进行结构自振频率识别研究.神经网络训练时使用的数据为有限元程序计算所得出,将有损伤结构在环境激励下某点的加速度响应,通过快速傅立叶变换得到的离散频率响应...
eclipse 配置AmaterasUML时需要的3个jar 包,以及配置文档 http://blog.csdn.net/asce1885/article/details/40744163
ANSI ASCE CI 71-21 Identifying, Quantifying, and Proving Loss of Productivity.pdf
ASCE_7-10美国建筑荷载规范(中文版);.pdf
结构安全和结构动力学有许多领域,通常需要计算随机变量函数的前几个统计矩。 通常的近似是泰勒展开法。 这种方法需要计算导数。 为了避免导数的计算,已经提出了概率矩的点估计。 然而,准确度非常低,并且有时,...
方法 通过模仿免疫识别和学习机理,提出一种基于Diagonal距离的人工免疫模式识别的结构损伤分类算法,并在IASC-ASCE SHM工作小组所提出的benchmark模型上对结构模式分类进行了实验测试.结果 仿真实验表明基于 ...
信道估计问题是使用正交频分复用(OFDM)方案的稀疏选频衰落多输入多输出(MIMO)通信系统中的关键技术问题之一。 为了估计稀疏MIMO信道,将稀疏不变步长归一化最小均方(ISS-NLMS)算法应用于自适应稀疏信道估计...
国ASCE 7-10 《建筑物和其他结构最小设计荷载》 (ASCE 7-10 “Minimum Design Loads for Buildings and Other Structures”)主要内容翻译与介绍 目录 0 规范内容简介1 1 总则7 1.1 适用范围7 1.2 定义和解释7 1.3 ...
应用该方法对由国际结构控制协会与美国土木工程学会(IASC-ASCE)提出的健康监测Benchmark结构进行了分析。结果表明,两阶段损伤诊断方法能够;隹确地定出可能损伤单元的位置与损伤程度,识别结果与真实的损伤接近,...