C 用C Builder建立數字簽名

2021-03-31 15:13:48 字數 1819 閱讀 6522

用c++builder建立數字簽名

如果你在網路上傳遞乙份資料,但卻存在著種種不安全的因素,使你對資料能否原封不動地到達目的地而心存疑惑,這時,你就可以給資料加上數字簽名,從而使對方可以通過驗證簽名來檢查你所傳過去的資料是否已被他人修改。

一、程式原理

數字簽名的工作原理還是比較簡單的,它是根據你所提供的原始資料,經過複雜的演算法,產生特定的資料簽名,對方通過同樣的過程也產生簽名,如果資料已被修改,那麼就不可能得到兩份一模一樣的簽名,從而就可判斷資料已被他人修改。程式設計人員利用windows的capi介面,就可以實現資料的加密、解密和數字簽名。  

二、程式清單

下面用c++builder的語句來看一下它的具體實現過程。

先來建立數字簽名,假定其資料來自於乙個檔案。

//變數宣告:

hcryptprov hprov;

// csp的控制代碼

hcrypthash hhash;

//雜湊的控制代碼

const int buffer=4096;

//緩衝區大小常數

byte pbuffer[buffer];    

//存放讀檔案內容的緩衝區

byte psignature[256];

//存放簽名的緩衝區

dword dsignaturelen=256;

//簽名的長度

tfilestream*sourcefile;

//乙個檔案流

if(!cryptacquirecontext(&hprov,null,null,prov—rsa—full,0))

//連線預設的csp,接受它的控制代碼放入hprov

if(!cryptcreatehash(hprov,calg—md5,0,0,&hhash))

//建立乙個雜湊物件,得到它的控制代碼放入hhash

do

}while(!(dreadlen對基於檔案的資料簽名進行檢驗。

//變數宣告:

hcryptprov hprov;

// csp的控制代碼

hcrypthash hhash;

//雜湊的控制代碼

hcryptkey hpublickey;    

//公共金鑰的控制代碼

const int buffer=4096;  

//緩衝區大小常數

byte pbuffer[buffer];    

//存放讀檔案內容的緩衝區

tfilestream*sourcefile;//乙個檔案流

byte psignature[256];    

//上一段得到的簽名的緩衝區

dword dsignaturelen;    

//上一段得到的簽名的長度

if(!cryptacquirecontext(&hprov,null,null,prov—rsa—full,0))

//連線預設的csp,接受它的控制代碼放入hprov

if(!cryptgetuserkey(hprov,at_signature,&hpublickey);

//得到公共金鑰的控制代碼

if(!cryptcreatehash(hprov,calg—md5,0,0,&hhash))

//建立乙個雜湊物件,得到它的控制代碼放入hhash

do

}while(!(dreadlen

if(!cryptverifysignature(hhash,psignature,dsignaturelen,hpublickey,null,0))

else

以上是乙個數字簽名的簡單實現,得到的簽名資料可以單獨儲存,也可以分開儲存。

C 用C Builder建立數字簽名

用c builder建立數字簽名 如果你在網路上傳遞乙份資料,但卻存在著種種不安全的因素,使你對資料能否原封不動地到達目的地而心存疑惑,這時,你就可以給資料加上數字簽名,從而使對方可以通過驗證簽名來檢查你所傳過去的資料是否已被他人修改。一 程式原理 數字簽名的工作原理還是比較簡單的,它是根據你所提供...

用c 完成猜數字遊戲

題目樣式 產生0到100之間的隨機數字可以用以下語句 random rdm new random int guess rdm.next 0,101 思路 先設乙個開關,是否要執行,是就輸入 1 否則的話輸入 0 然後根據這個隨機數字guess,使用者輸入的的值賦值給input,用do while語句...

C語言用pthread h建立執行緒

c11制定了乙個標準的執行緒庫threads.h,但部分編譯器不支援它。官方api列表 這裡列出幾個常用api pthread t 一種資料型別,用於儲存執行緒id intpthread create pthread t id,傳入乙個pthread t型別的變數的位址 const pthread ...