最近因為專案的關係會用到 關於 加解密的部分
中間有遇到一些問題就紀錄一下,今天來講一下如何使用 XC.RSAUtil 來做到 RSA 加解密
會用這套件主要是因為,有時候遇到的廠商並非微軟的廠商,所以常常會給 PEM 檔案,這裡面有時候會有 PKCS1 , PKCS8 格式
這範例主要就是透過內建的 System.Security.Cryptography.RSA 產生公鑰和私鑰,之後轉成 PKCS1, PKCS8 進行加解密
1. nuget XC.RSAUtil https://www.nuget.org/packages/XC.RSAUtil/
2. 廢話不多說,程式碼很簡單一看就懂
//透過內建的產生公鑰和私鑰
var rsa = System.Security.Cryptography.RSA.Create();
var publicXMLKey = rsa.ToXmlString(false);
var privateXMLKey = rsa.ToXmlString(true);
var pubKeyPem = XC.RSAUtil.RsaKeyConvert.PublicKeyXmlToPem(publicXMLKey);
var privateKeyPkcs1 = XC.RSAUtil.RsaKeyConvert.PrivateKeyXmlToPkcs1(privateXMLKey);
Console.WriteLine("Private PKCS1");
Console.WriteLine(privateKeyPkcs1);
Console.WriteLine("");
var privateKeyPkcs8 = XC.RSAUtil.RsaKeyConvert.PrivateKeyXmlToPkcs8(privateXMLKey);
Console.WriteLine("Private PKCS8");
Console.WriteLine(privateKeyPkcs8);
Console.WriteLine("");
var str = "測試加密使用的內文當麻許功蓋";
//加密
//PEM
var encData = "";
using (var rsaUtil = new XC.RSAUtil.RsaPkcs1Util(Encoding.UTF8, pubKeyPem))
{
encData = rsaUtil.Encrypt(str, RSAEncryptionPadding.Pkcs1);
Console.WriteLine("加密後文字");
Console.WriteLine(encData);
Console.WriteLine("");
}
//解密 Pkcs1
using (var rsaUtil = new XC.RSAUtil.RsaPkcs1Util(Encoding.UTF8, pubKeyPem, privateKeyPkcs1))
{
var deCrypto = rsaUtil.Decrypt(encData, RSAEncryptionPadding.Pkcs1);
Console.WriteLine("解密後 PKCS1");
Console.WriteLine(deCrypto);
Console.WriteLine("");
}
//解密 Pkcs8
using (var rsaUtil = new XC.RSAUtil.RsaPkcs8Util(Encoding.UTF8, pubKeyPem, privateKeyPkcs8))
{
var deCrypto = rsaUtil.Decrypt(encData, RSAEncryptionPadding.Pkcs1);
Console.WriteLine("解密後 PKCS8");
Console.WriteLine(deCrypto);
Console.WriteLine("");
}
筆記一下,之後也會有相關的測試。