用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 數字簽名的原理和應用
- 大話數字簽名
- 給軟體數字簽名
- win10 如何禁用數字簽名 win10 關閉數字簽名方法Win10
- ActiveX控制元件數字簽名實踐(免費簽名)控制元件
- win10 禁止驗證數字簽名方法 win10 如何禁用數字簽名Win10
- 支付寶介面的數字簽名
- 安全基礎:數字信封、數字簽名、數字證書(加簽驗籤,加密解密)加密解密
- 如何關閉win10的數字簽名_win10禁用數字簽名的方法Win10
- Java 新增數字簽名到Excel以及檢測、刪除簽名JavaExcel
- Java 操作PPT數字簽名(一):新增、檢測、刪除簽名Java
- win10如何永久禁用數字簽名_win10怎麼關閉禁用數字簽名Win10
- Java 新增、驗證PDF 數字簽名Java
- windows10怎麼關閉數字簽名 win10永久關閉數字簽名的方法WindowsWin10
- exe軟體如何進行數字簽名
- 公鑰加密、數字簽名、訊息認證加密
- 詳解數字簽名的含義及作用
- Window 7 驅動數字簽名解決方案
- 文件數字簽名工作原理是什麼?文件簽名有什麼好處?哪些行業使用文件簽名證書?行業
- 使用者下載已簽名的軟體後 如何知道數字簽名是否可信
- iOS逆向——應用簽名及重簽名原理iOS
- 超詳細https握手與數字簽名講解HTTP
- Java 獲取PDF數字簽名證照資訊Java
- 驅動沒有數字簽名的解決方案
- win10系統需要驅動數字簽名如何操作_win10需要數字簽名的驅動程式解決方法Win10
- 使用mkcert建立自簽名證書mkcert
- Android 應用簽名Android
- React 簽字手寫簽名元件 react-signatureReact元件
- kali更新源數字簽名錯誤解決辦法
- C# 獲取PDF中的數字簽名證書C#
- WHQL認證如何給驅動程式做數字簽名
- Android應用重簽名Android
- iOS應用簽名(上)iOS
- iOS應用簽名(下)iOS
- C#/VB.NET 給Excel新增、刪除數字簽名C#Excel
- iOS逆向 應用重簽名+微信重簽名實戰iOS
- 實體鑑別GB/T 15843研究(三)——GB/T 15843.3 採用數字簽名技術
- canvas橫屏簽名,簽名圖片旋轉90度生成base64Canvas
- 如何快速建立自簽名 SSL 證書 -- [mkcert]mkcert