.net core 使用RSA獲取私鑰證書並簽名


RSA在.NET Core的改動

以前我們使用RSA加密主要是使用RSACryptoServiceProvider這個類,在.NET Core中也有這個類,但是這個類並不支持跨平台,所以如果你是用這個類來進行加/解密在windows上運行是完全沒有錯誤的,但是只要你一放到Linux下就會出現異常。

查閱資料得知,要解決這個問題,需要改用 System.Security.Cryptography.RSA.Create() 工廠方法,使用它之后,在 Windows 上創建的是 System.Security.Cryptography.RSACng 的實例,在 Mac 與 Linux 上創建的是 System.Security.Cryptography.RSAOpenSsl 的實例,它們都繼承自 System.Security.Cryptography.RSA 抽象類。

 

這里要講一下RSA2算法。

什么是RSA2 ?RSA2 是在原來SHA1WithRSA簽名算法的基礎上,新增了支持SHA256WithRSA的簽名算法。該算法比SHA1WithRSA有更強的安全能力。

算法名稱 標准簽名算法名稱 備注
RSA2 SHA256WithRSA (強烈推薦使用),強制要求RSA密鑰的長度至少為2048
RSA SHA1WithRSA 對RSA密鑰的長度不限制,推薦使用2048位以上

簽名的作用:保證數據完整性,機密性和發送方角色的不可抵賴性

看下代碼:

     /// <summary>
        /// 獲取證書私鑰並簽名
        /// </summary>
        /// <param name="priKeyFile">私鑰證書</param>
        /// <param name="keyPwd">私鑰密碼</param>
        /// <param name="data">簽名內容</param>
        /// <returns></returns>
        private static string PrivateSign(string priKeyFile, string keyPwd, string data) {

            var pc = new X509Certificate2(priKeyFile, keyPwd, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);

            var data_byte = Encoding.UTF8.GetBytes(data);

            var result_byte = pc.GetRSAPrivateKey().SignData(data_byte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

            var strResult = Convert.ToBase64String(result_byte);

            return strResult;

        }
HashAlgorithmName.SHA256  //獲取表示“SHA256”的哈希算法名稱。
RSASignaturePadding.Pkcs1 //獲取使用 PKCS #1 v1.5 填充模式的對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM