沈洪敏
摘 要:文章介紹了一種利用CAPICOM組件以及C#語言來實(shí)現(xiàn)數(shù)字信封技術(shù)的方法。希望通過文章的分析,能夠?yàn)橄嚓P(guān)人士提供一定的參考和借鑒。
關(guān)鍵詞:數(shù)字信封;CAPICOM;C#語言
引言
隨著互聯(lián)網(wǎng)以及移動(dòng)通信技術(shù)的的發(fā)展,人們之間的信息交流已經(jīng)越來越依賴計(jì)算機(jī)通信工具。然而普通的計(jì)算機(jī)通信工具,如郵件,QQ,微信等都不支持信息加密傳輸。這樣人們?cè)诨ヂ?lián)網(wǎng)通信的時(shí)候信息的安全不能得到保障,導(dǎo)致信息泄密事件層出不窮。而實(shí)際上信息加密的技術(shù)目前已經(jīng)非常成熟,比如數(shù)字信封技術(shù)是一種公認(rèn)有效并且安全的技術(shù)。文章將介紹一種數(shù)字信封技術(shù)的具體實(shí)現(xiàn)方法。
1 數(shù)字信封與CAPICOM簡(jiǎn)介
數(shù)字信封是公鑰密碼體制在實(shí)際中的一個(gè)應(yīng)用,是用加密技術(shù)來保證只有規(guī)定的特定收信人才能閱讀通信的內(nèi)容。
數(shù)字信封技術(shù)通過接收方的公鑰加密對(duì)稱密碼算法密鑰,并用對(duì)稱密鑰加密信息,那么只有接收方(即持有私鑰的人)才能解開該對(duì)稱密鑰,然后再利用該密鑰解開密文。也就是說只有一個(gè)人,即持有私鑰的接收方才能解密信息,而其他人只能看到加密后的信息即圖示的密文(打開是一堆亂碼),這樣就保證了信息的機(jī)密性。
CAPICOM 的全名是 Cryptographic API Component Object Model,是微軟的Windows操作系統(tǒng)里的一個(gè)安全組件。通過CAPICOM可以實(shí)現(xiàn)以數(shù)字方式簽署數(shù)據(jù)、代碼、驗(yàn)證數(shù)字簽章、將數(shù)據(jù)報(bào)文裝起來做為私人之用、雜湊數(shù)據(jù)、將數(shù)據(jù)加密解密等功能。
2 基于CAPICOM組件的數(shù)字信封C#算法實(shí)現(xiàn)
我們通過CAPICOM組件以及C#語言來實(shí)現(xiàn)數(shù)字信封算法,即實(shí)現(xiàn)通過數(shù)字信封技術(shù)來封裝加密信息,并通過數(shù)字信封技術(shù)來解密被加密的信息的功能。
我們的算法主要包括兩個(gè)函數(shù):
String EvelopeInformation(string plainString,string publicCertificationPath )
該函數(shù)提供通過數(shù)字信封技術(shù)來封裝數(shù)據(jù)的功能:其中參數(shù)plainString是需要加密的數(shù)據(jù), publicCertificationPath是數(shù)據(jù)接收方的公鑰證書路徑。函數(shù)處理完畢返回封裝后的數(shù)據(jù)即密文。密文采用3DES,128位加密算法加密,密鑰使用RSA加密算法。
public static string DeEvelopeInformation (string envelopedString)
該函數(shù)提供解密數(shù)字信封的功能:其中參數(shù)envelopedString是需要解密的數(shù)字信封密文。注意,這里我們不提供接收方私鑰證書的路徑參數(shù),所以要求接收方的私鑰證書安裝在本人使用的計(jì)算機(jī)的用戶證書存儲(chǔ)區(qū)內(nèi)。函數(shù)處理完畢返回?cái)?shù)字信封封裝前的數(shù)據(jù)即明文
我們的數(shù)字信封技術(shù)C#語言實(shí)現(xiàn)的全部代碼與相關(guān)注釋如下:
using System;
using Interop.CAPICOM;
namespace NET.Envelope
{
public class CapicomEnvelope
{
///
///數(shù)字信封加密封裝數(shù)據(jù)(信息通過3DES,128位加密,密鑰使用RSA加密算法)
///
public static string EvelopeInformation(string plainString,string publicCertificationPath )
{
try
{
EnvelopedData envelopedData;
ICertificate2 iCertificate;
envelopedData = new EnvelopedData();
iCertificate = new Certificate();
iCertificate.Load(
publicCertificationPath,
null,
CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_DEFAULT,
CAPICOM_KEY_LOCATION.CAPICOM_CURRENT_USER_KEY
);
envelopedData.Content = plainString;
envelopedData.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM.CAPICOM_ENCRYPTION_ALGORITHM_3DES;
envelopedData.Algorithm.KeyLength =
CAPICOM_ENCRYPTION_KEY_LENGTH.CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS;
envelopedData.Recipients.Add(iCertificate);
string envelopedString = envelopedData.Encrypt(CAPICOM_ENC ODING_TYPE.CAPICOM_ENCODE_ANY);
return envelopedString;
}
catch(Exception e)
{
throw new Exception(e.ToString());
}
}
///
/// 解密數(shù)字信封,根據(jù)用戶證書存儲(chǔ)區(qū)內(nèi)證書
///
public static string DeEvelopeInformation (string envelopedString)
{
try
{
EnvelopedData envelopedData ;
envelopedData = new EnvelopedData();
envelopedData.Decrypt(envelopedString);
string plainString = envelopedData.Content;
return plainString;
}
catch(Exception e)
{
throw new Exception(e.ToString());
}
}
}}
3 結(jié)束語
文章從實(shí)際的應(yīng)用需求出發(fā)提出了數(shù)字信封技術(shù)的重要性,同時(shí)介紹了數(shù)字信封技術(shù)的實(shí)現(xiàn)原理,最后提出了利用CAPICOM組件以及C#語言來實(shí)現(xiàn)數(shù)字信封技術(shù)的具體方法。
參考文獻(xiàn)
[1]鄧禮全.計(jì)算機(jī)網(wǎng)絡(luò)及應(yīng)用[M].北京:科學(xué)出版社,2014.
[2]李楠楠.數(shù)據(jù)庫原理及應(yīng)用[M].北京:科學(xué)出版社,2016.