[C#] 透過 XC.RSAUtil 做到 RSA 加解密包含 PEM,PKCS1,PKCS8 加解密

2022-02-23

最近因為專案的關係會用到 關於 加解密的部分

中間有遇到一些問題就紀錄一下,今天來講一下如何使用 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(""); }


筆記一下,之後也會有相關的測試。


當麻許的碎念筆記 2014 | Donma Hsu Design.