日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《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);}

?

?

?

轉載于:https://www.cnblogs.com/android-html5/archive/2010/08/31/2533990.html

總結

以上是生活随笔為你收集整理的《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。