VC中實現雜湊Hash演算法

2021-06-06 23:55:13 字數 2452 閱讀 6674

vc中實現雜湊hash演算法

2012-03-23 10:16:35     

我來說兩句 

收藏   

我要投稿    [字型:

小大]

hash函式我們可以自己用c來編寫,但是如果在vc中就不必了,因為在vc中有實現hash演算法的 函式可以呼叫,就是cryptacquirecontext函式,這個函式的定義在wincrypt.h標頭檔案中。下面是我在mfc中實現的,因為想要結果輸出到messagebox中,所以就在視類裡定義和實現了gethash函式來計算雜湊值。

首先是在view類的標頭檔案中包含下列檔案和內容:

#define _win32_winnt 0x0400

#include

#include

其中我們用到的cryptacquirecontex函式就在wincrypy.h中定義了。

然後我們在view類中定義gethash函式,函式型別為dword型別,引數為:

gethash(byte *pbdata, dword dwdatalen, alg_id algid, lptstr pszhash)

先看一下這個函式幾個引數的意義吧.

// 計算hash,成功返回0,失敗返回getlasterror()

//  const byte *pbdata, // 輸入資料www.2cto.com

//  dword dwdatalen,     // 輸入資料位元組長度

//  alg_id algid       // hash 演算法:calg_md5,calg_sha

//  lptstr pszhash,  // 輸出16進製制hash字串,md5長度為32+1, sha長度為40+1

然後我們在view類中完成對gethash函式的定義,如下:

dword chash_testview::gethash(byte *pbdata, dword dwdatalen, alg_id algid, lptstr pszhash)

if(!crypthashdata(hhash, pbdata, dwdatalen, 0))

dword dwsize;

dword dwlen = sizeof(dwsize);

cryptgethashparam(hhash, hp_hashsize, (byte*)(&dwsize), &dwlen, 0);

byte* phash = new byte[dwsize];

dwlen = dwsize;

cryptgethashparam(hhash, hp_hashval, phash, &dwlen, 0);

lstrcpy(pszhash, _t(""));

tchar sztemp[3];

for (dword i = 0; i < dwlen; ++i)

delete phash;

cryptdestroyhash(hhash);

cryptreleasecontext(hprov, 0);

return dwreturn;

}有了這個gethash函式之後,我們就可以通過呼叫它而計算一些字串或者char型別的資料的hash值了。像我們經常在網上見得一些hash校驗器也可以比較容易的實現了,如下面的:

這裡為了簡單的驗證一下,我們就測試乙個字串,然後它的hash值我們用乙個messagebox輸出,看看結果,我們測試的字串是「hello,hash!你好,雜湊!」其中沒有空格,標點符號為英文狀態。我們在ondraw函式中加入測試**:

tchar szstr[20] = ;

tchar szhash[41] = ;

strcpy(szstr,"hello,hash!你好,雜湊!");

gethash((byte*)szstr, strlen(szstr), calg_md5,szhash);

messagebox(szhash,mb_ok);

結果如下:

然後我們用上面的hash計算工具算一下是不是對。

可以看出結果相同,證明對了。當然用python實現也是相當的簡單,我們看一下:

當然上面都是實現的md5演算法,如果想用sha演算法,可以修改呼叫gethash((byte*)szstr, strlen(szstr), calg_md5,szhash);的第三個引數為calg_sha

有興趣的就可以自己編寫乙個hash計算工具了。

Hash雜湊演算法

hash演算法 雜湊演算法將任意長度的二進位制值對映為較短的固定長度的二進位制值,短的二進位制值稱為雜湊值。雜湊值是一段資料唯一且極其緊湊的數值表示形式。如果雜湊一段明文而且哪怕只更改該段落的乙個字母,隨後的雜湊都將產生不同的值。要找到雜湊為同乙個值的兩個不同的輸入,在計算上是不可能的,所以資料的雜...

hash演算法(雜湊)

hash 演算法 什麼hash 演算法 簡單地來講就是將字串轉化為乙個整數。它一般應用於字串的場景中。現在我們來講hash演算法。hash 公式 hash i hash i 1 base str i a 1 mod base的值是隨機的,意思就是你自己可以去選擇任意的數,但是按照經驗值表明,一般ba...

雜湊演算法 雜湊演算法hash 理解筆記 編輯中

雜湊演算法 有兩個特點 加密過程不可逆,意味著我們無法通過輸出的雜湊資料倒推原本的明文是什麼 輸入的明文與輸出的雜湊資料一一對應,任何乙個輸入資訊的變化,都必將導致最終輸出的雜湊資料的變化。在區塊鏈中,通常使用sha 256 安全雜湊演算法 進行區塊加密,這種演算法的輸入長度為256位,輸出的是一串...