用C++Builder建立數字簽名 (轉)
用C++Builder建立數字簽名
如果你在遞一份資料,但卻存在著種種不的因素,使你對資料能否原封不動地到達目的地而心存疑惑,這時,你就可以給資料加上數字簽名,從而使對方可以透過驗證簽名來檢查你所傳過去的資料是否已被他人修改。
一、原理
數字簽名的工作原理還是比較簡單的,它是根據你所提供的原始資料,經過複雜的演算法,產生特定的資料簽名,對方透過同樣的過程也產生簽名,如果資料已被修改,那麼就不可能得到兩份一模一樣的簽名,從而就可判斷資料已被他人修改。人員利用的C介面,就可以實現資料的、和數字簽名。
二、程式清單
下面用C++Builder的語句來看一下它的具體實現過程。
先來建立數字簽名,假定其資料來自於一個。
//變數宣告:
HCRYPTPROV hProv;
// CSP的控制程式碼
HCRYPTHASH hHash;
//雜湊的控制程式碼
const int BUFFER=4096;
//緩衝區大小常數
BYTE pBuffer[BUFFER];
//存放讀檔案內容的緩衝區
BYTE pSignature[256];
//存放簽名的緩衝區
D dSignatureLen=256;
//簽名的長度
TFileStream*File;
//一個檔案流
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV—RSA—FULL,0))
//連線預設的CSP,接受它的控制程式碼放入hProv
{
//錯誤處理
}
if(!CryptCreateHash(hProv,CALG—MD5,0,0,&hHash))
//建立一個雜湊,得到它的控制程式碼放入hHash
{
//錯誤處理
}
do
{
dReadLen=sourceFile->Read(pBuffer,BUFFER);
if(!CryptHashData(hHash,pBuffer,dReadLen,0))
//根據檔案的內容計算雜湊值
{
//錯誤處理
}
}while(!(dReadLen
//使用私人金鑰對雜湊值進行數字簽名
//簽名資料放入pSignature,長度放入dSignatureLen
//錯誤處理
}
對基於檔案的資料簽名進行檢驗。
//變數宣告:
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
{
dReadLen=sourceFile->Read(pBuffer,BUFFER);
if(!CryptHashData(hHash,pBuffer,dReadLen,0))
//根據檔案的內容計算雜湊值
{
//錯誤處理
}
}while(!(dReadLen
{
if(GetLastError()==NTE—BAD—SIGNATURE)
ShowMessage(″檔案已被修改″);
}
else
{
ShowMessage(″檔案沒被修改″);
}
以上是一個數字簽名的簡單實現,得到的簽名資料可以單獨儲存,也可以分開儲存。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988906/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 數字簽名(java) (轉)Java
- 數字簽名
- 數字簽名原理
- 數字簽名的原理和應用
- 應用WSDK - 實踐Web Services的數字簽名(上) (轉)Web
- 大話數字簽名
- Elgamal數字簽名原理GAM
- 加密與數字簽名加密
- 取消WindowsXP下驅動程式數字簽名(轉)Windows
- 證書的數字簽名和認證 (轉)
- 數字簽名是什麼?
- applet數字簽名APP
- 給軟體數字簽名
- win10 如何禁用數字簽名 win10 關閉數字簽名方法Win10
- win10 禁止驗證數字簽名方法 win10 如何禁用數字簽名Win10
- 加減密和數字簽名
- 安全基礎:數字信封、數字簽名、數字證書(加簽驗籤,加密解密)加密解密
- 如何關閉win10的數字簽名_win10禁用數字簽名的方法Win10
- ActiveX控制元件 數字簽名 簡明指南 (轉)控制元件
- ActiveX控制元件數字簽名實踐(免費簽名)控制元件
- Java 操作PPT數字簽名(一):新增、檢測、刪除簽名Java
- Java 新增數字簽名到Excel以及檢測、刪除簽名JavaExcel
- win10如何永久禁用數字簽名_win10怎麼關閉禁用數字簽名Win10
- Android 安全加密:數字簽名和數字證書Android加密
- Android安全加密:數字簽名和數字證書Android加密
- Java 新增、驗證PDF 數字簽名Java
- 支付寶介面的數字簽名
- windows10怎麼關閉數字簽名 win10永久關閉數字簽名的方法WindowsWin10
- 深入理解加密、解密、數字簽名和數字證書加密解密
- exe軟體如何進行數字簽名
- 效能:驗證數字簽名導致卡死
- 從數字簽名的工作原理看電子商務安全(轉)
- Window 7 驅動數字簽名解決方案
- Java 獲取PDF數字簽名證照資訊Java
- 詳解數字簽名的含義及作用
- java使用RSA加密方式,實現數字簽名Java加密
- 公鑰加密、數字簽名、訊息認證加密
- RSA加密解密及數字簽名Java實現加密解密Java