使用RSA證書加密敏感資料

2021-07-23 02:49:43 字數 2254 閱讀 6360

x.509證書標準支援三種不對稱加密演算法:rsa, dsa, diffie-hellman algorithms。最常用的是rsa演算法。所以本文就以前面章節使用makecert工具生成的生成的mytestcert證書進行加密解密,這個證書具有rsa演算法1024位的金鑰對。

figure 12. rsa加密解密過程

證書使用前面「使用makecert工具獲得」章節生成的mytestcert,當然也可以是從商業ca獲得的證書。

你獲得的證書應該是含有公鑰和私鑰的完整證書,一般是pfx形式的證書。

要接收加密資料,需要把你的公鑰分發給加密資料的加密方,加密方使用你的公鑰加密資料。

證書要麼以pfx形式存在,要麼被匯入到證書儲存區。

如果你的證書存在於證書儲存區可以通過證書管理控制台提供的證書匯出功能匯出只含有公鑰的cer證書。

如果證書以pfx證書檔案形式存在,可以通過**讀取證書然後匯出為只含公鑰的cer證書。

參考前面章節匯出乙個名為mytestcert.cer證書,將此證書分發給需要用來加密的加密方。

待加密的資料可能有兩種形式,一種是二進位制的資料,本身就是一組位元組流,這樣的資料可以跳過這一步,直接進入加密步驟。還有一種情況是字串資料,字串中同樣的字元使用不同的**頁會生成不同的位元組碼,所以從字串到位元組流的轉換是需要指定使用何種編碼的。在解密之後,要從位元組流轉換到字串就要使用相同的**頁解碼,否則就會出現亂碼。

//儲存明文檔案的位元組陣列

byte plaintextbyte = encoding.utf8.getbytes(「rsa證書對敏感資料進行加密!」);

這裡用utf8**頁對明文進行編碼,把明文本串轉成位元組流。

//從只包含公鑰的證書檔案載入證書

x509certificate2 myx509certificate2 = new

x509certificate2(@"c:\samples\partneraencryptmsg\mytestcert.cer");//從

cer證書中獲得含公鑰的

rsacryptoserviceprovider

rsacryptoserviceprovider myrsacryptoserviceprovider = (rsacryptoserviceprovider)myx509certificate2.publickey.key;

//使用

rsacryptoserviceprovider

把明文本節流加密為密文字節流

byte cryptograph = myrsacryptoserviceprovider.encrypt(plaintextbyte, false);

使用1024為的金鑰加密,原料應該是128位元組(1024位)的byte的原始資料,加密後的資料也是128位元組(1024位),如果明文不足128位元組,rsacryptoserviceprovider會自動用隨機數補足128位元組。

dotnet的rsa實現有個特點,它必須要在明文中新增一些隨機數,所以明文不能把128位元組佔滿,實際測試,明文最多為117位元組,留下的空間用來填充隨機數。

所以,用同乙個金鑰對同一串字串進行加密,每次得到的密文都是不一樣的。

//從證書檔案載入證書,如果含有私鑰的,需要提供儲存證書時設定的密碼

x509certificate2 myx509certificate2 = new

x509certificate2(@"c:\samples\partneraencryptmsg\mytestcert.pfx", "password");

//從證書中獲得含私鑰的

rsacryptoserviceprovider

rsacryptoserviceprovider myrsacryptoserviceprovider = (rsacryptoserviceprovider)myx509certificate2.privatekey;

//使用

rsacryptoserviceprovider

把密文字節流解密為明文本節流

byte plaintextbyte = myrsacryptoserviceprovider.decrypt(cryptograph, false);

解密需要載入含私鑰的pfx證書,需要提供私鑰保護密碼。

使用加密時採用的同樣的**頁utf8把解密後的明文byte轉成字串

string plaintext = encoding.utf8.getstring(plaintextbyte);

暴露敏感資料

威脅載體 可以獲得你的敏感資料和任何資料備份訪問許可權的人。包括靜止資料,在傳輸過程中,甚至在你的自定義瀏覽器中,包括內部和外部欺騙。攻擊媒介 攻擊者通常不直接破壞加密。他們破壞其他的東西,例如偷取秘鑰,做中間人攻擊,或者從伺服器,在傳輸當中或者從使用者的瀏覽器中,偷取明文資料。安全弱點 最普通的漏...

對前後端敏感資料資料簡單加密

最近突然想到前後端敏感資料加密,就先寫了個簡單加密demo。是基於註解和aop來實現加密解密。定義兩個註解,encrypt對響應資料加密。decode對請求資料解密。description 方法引數上加上此註解表示請求資料解密 author wenwen date 2020 3 3 15 18 ve...

保護記憶體中的敏感資料

某些時候,我們需要在記憶體中儲存一些非常敏感的資料,比如信用卡賬號密碼 軟體註冊碼等等。那麼危險隨之而來,使用一些高階軟體除錯工具檢視程序的記憶體資料,居心不良的人就會有機會拿到這些本該嚴格保密的資料。microsoft windows 2000 sp4 以上版本的作業系統提供了用於資料保護的 ap...