日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据(转)

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:http://www.cnblogs.com/chnking/archive/2007/08/30/875947.html 使用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字節。

DotnetRSA實現有個特點,它必須要在明文中添加一些隨機數,所以明文不能把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证书加密敏感数据(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。