Bouncy Castle C# API 提供免費的 PGP(Pretty Good Privacy) 加密、數位簽章、數位認證等功能。
我們就從最一開始如何產生 Bouncy Castle 公私鑰( Public 、 Private key)並保存成檔案開始說起 。
本文是利用 Bouncy Castle官網 下載的 bccrypto-net-1.7-bin.zin 以及 bccrypto-net-1.7-src.zip 進行示範,src.zip 壓縮檔裡面包含官網的範例程式可提供給各位參考。
而此篇就是利用 官網範例 RsaKeyRingGenerator 改寫而成。
1.首先在專案的 Reference 下 滑鼠點選又見 add Reference ,點選 Browers 選擇 bccrypto-net-1.7-bin 解壓縮的資料夾下 BouncyCastle.Crypto.dll 按下確定。這樣即可使用 Bouncy Castle 的 API 了。
2. 接下來利用 bccrypto-net-1.7-src RsaKeyRingGenerator Example 撰寫的 Method 即可完成這次的功能。
3. 接著我們撰寫產生 PGP publica key 以及 private key 的檔案 method ,程式如下:
private static void ExportKeyPair(
Stream secretOut,
Stream publicOut,
AsymmetricKeyParameter publicKey,
AsymmetricKeyParameter privateKey,
string identity,
char[] passPhrase,
bool armor)
{
if (armor)
{
secretOut = new ArmoredOutputStream(secretOut);
}
PgpSecretKey secretKey = new PgpSecretKey(
PgpSignature.DefaultCertification,
PublicKeyAlgorithmTag.RsaGeneral,
publicKey,
privateKey,
DateTime.UtcNow,
identity,
SymmetricKeyAlgorithmTag.Cast5,
passPhrase,
null,
null,
new SecureRandom()
);
secretKey.Encode(secretOut);
if (armor)
{
secretOut.Close();
publicOut = new ArmoredOutputStream(publicOut);
}
PgpPublicKey key = secretKey.PublicKey;
key.Encode(publicOut);
if (armor)
{
publicOut.Close();
}
}
傳入參數依序如下(1) Private key 的 FileStream ,
(2) Public key 的 FileStream,
(3) 由 Bouncy Castle 產生的 publuic Key ,
(4) 由 Bouncy Castle產生的 private key ,
(5) 使用者名稱 String ,
(6) armor 不明.......範例設為true
4. 產生 Public Private Key 以及呼叫 ExportKeyPair 程式寫法如下:
static void Main(string[] args)
{
//RSA密鑰產生器
IAsymmetricCipherKeyPairGenerator kpg = GeneratorUtilities.GetKeyPairGenerator("RSA");
//Key 構造使用參數
kpg.Init(new RsaKeyGenerationParameters(
BigInteger.ValueOf(0x10001), new SecureRandom(),
1024,// key 的長度
25));
AsymmetricCipherKeyPair kp = kpg.GenerateKeyPair();
char[] password = "123456".ToCharArray(); //私鑰的密碼
Stream out1, out2;
out1 = File.Create(@"D:\BC\priv.asc");//私鑰放置位置
out2 = File.Create(@"D:\BC\pub.asc"); //公鑰放置位置
ExportKeyPair(out1, out2, kp.Public,
kp.Private, "Jama", password, true);
}
這樣即可簡單產生一組 RSA 的公私鑰檔案
在 D:\BC 目錄下,方便以後專案使用了。
想請問一下,如果是要做HSM的PKCS7有沒有什麼合適的資料可以參考?
回覆刪除另外目前所知道的公私鑰檔案都是放在HSM內,Bouncy Castle要如何取得然後做PKCS7的加解密呢?
謝謝