使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据(转)
一、?使用RSA證書加、解密敏感數據
X.509證書標準支持三種不對稱加密算法:RSA, DSA, Diffie-Hellman algorithms。最常用的是RSA算法。所以本文就以前面章節使用makecert工具生成的生成的MyTestCert證書進行加密解密,這個證書具有RSA算法1024位的密鑰對。
?
Figure 12. RSA加密解密過程
1、 生成證書、分發證書
證書使用前面“使用makecert工具獲得”章節生成的MyTestCert,當然也可以是從商業CA獲得的證書。
你獲得的證書應該是含有公鑰和私鑰的完整證書,一般是pfx形式的證書。
要接收加密數據,需要把你的公鑰分發給加密數據的加密方,加密方使用你的公鑰加密數據。
證書要么以pfx形式存在,要么被導入到證書存儲區。
如果你的證書存在于證書存儲區可以通過證書管理控制臺提供的證書導出功能導出只含有公鑰的cer證書。
如果證書以pfx證書文件形式存在,可以通過代碼讀取證書然后導出為只含公鑰的cer證書。
參考前面章節導出一個名為MyTestCert.cer證書,將此證書分發給需要用來加密的加密方。
2、 字符串明文轉成某一代碼頁對應的編碼字節流
待加密的數據可能有兩種形式,一種是二進制的數據,本身就是一組字節流,這樣的數據可以跳過這一步,直接進入加密步驟。還有一種情況是字符串數據,字符串中同樣的字符使用不同的代碼頁會生成不同的字節碼,所以從字符串到字節流的轉換是需要指定使用何種編碼的。在解密之后,要從字節流轉換到字符串就要使用相同的代碼頁解碼,否則就會出現亂碼。
//保存明文文件的字節數組
Byte[] plainTextByte = Encoding.UTF8.GetBytes(“RSA證書對敏感數據進行加密!”);
這里用utf8代碼頁對明文進行編碼,把明文字符串轉成字節流。
3、 加密操作
//從只包含公鑰的證書文件載入證書
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字節,留下的空間用來填充隨機數。
所以,用同一個密鑰對同一串字符串進行加密,每次得到的密文都是不一樣的。
4、 解密操作
//從證書文件載入證書,如果含有私鑰的,需要提供保存證書時設置的密碼
X509Certificate2 myX509Certificate2 = new X509Certificate2(@"C:\Samples\PartnerAEncryptMsg\MyTestCert.pfx", "password");
//從證書中獲得含私鑰的RSACryptoServiceProvider
RSACryptoServiceProvider myRSACryptoServiceProvider = (RSACryptoServiceProvider)myX509Certificate2.PrivateKey;
//使用RSACryptoServiceProvider把密文字節流解密為明文字節流
byte[] plaintextByte = myRSACryptoServiceProvider.Decrypt(Cryptograph, false);
解密需要載入含私鑰的pfx證書,需要提供私鑰保護密碼。
5、 從編碼字節流轉成字符串明文
使用加密時采用的同樣的代碼頁utf8把解密后的明文byte[]轉成字符串
string Plaintext = Encoding.UTF8.GetString(plaintextByte);
轉載于:https://www.cnblogs.com/millen/archive/2011/05/03/2035071.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# WCF WinCE 解决方案
- 下一篇: mcf5271如何使用数学库函数