C# -- RSA加密與解密

来源:https://www.cnblogs.com/ChengWenHao/archive/2019/08/22/CSharpRSA.html

1. RSA加密與解密 -- 使用公鑰加密、私鑰解密 測試: RSATool myRSA = new RSATool(); Dictionary<string, string> dictK = new Dictionary<string, string>(); dictK = myRSA.GetKe ...


1.  RSA加密與解密  --  使用公鑰加密、私鑰解密

    public class RSATool
    {
        public string Encrypt(string strText, string strPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(strPublicKey);

            byte[] byteText = Encoding.UTF8.GetBytes(strText);
            byte[] byteEntry = rsa.Encrypt(byteText, false);

            return Convert.ToBase64String(byteEntry);
        }


        public string Decrypt(string strEntryText,string strPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(strPrivateKey);

            byte[] byteEntry = Convert.FromBase64String(strEntryText);
            byte[] byteText = rsa.Decrypt(byteEntry, false);

            return Encoding.UTF8.GetString(byteText);
        }

        public Dictionary<string,string> GetKey()
        {
            Dictionary<string, string> dictKey = new Dictionary<string, string>();
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

            dictKey.Add("PublicKey", rsa.ToXmlString(false));
            dictKey.Add("PrivateKey", rsa.ToXmlString(true));

            return dictKey;
        }
    }

測試:

            RSATool myRSA = new RSATool();
            Dictionary<string, string> dictK = new Dictionary<string, string>();
            dictK = myRSA.GetKey();

            string strText = "123456";
            Console.WriteLine("要加密的字元串是:{0}", strText);

            string str1 = myRSA.Encrypt("123456", dictK["PublicKey"]);
            Console.WriteLine("加密後的字元串:{0}", str1);

            string str2 = myRSA.Decrypt(str1, dictK["PrivateKey"]);
            Console.WriteLine("解密後的字元串:{0}", str2);
View Code

 

 

2.  RSA加密與解密  --  使用同一個密鑰容器進行加密與解密

    public class RSAToolX
    {
        public string Encrypt(string strText)
        {
            CspParameters CSApars = new CspParameters();
            CSApars.KeyContainerName = "Test001";

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CSApars);

            byte[] byteText = Encoding.UTF8.GetBytes(strText);
            byte[] byteEntry = rsa.Encrypt(byteText, false);

            return Convert.ToBase64String(byteEntry);
        }


        public string Decrypt(string strEntryText)
        {
            CspParameters CSApars = new CspParameters();
            CSApars.KeyContainerName = "Test001";

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CSApars);

            byte[] byteEntry = Convert.FromBase64String(strEntryText);
            byte[] byteText = rsa.Decrypt(byteEntry, false);

            return Encoding.UTF8.GetString(byteText);
        }
    }

測試 :

            RSAToolX myRSA = new RSAToolX();

            string strText = "123456";
            Console.WriteLine("要加密的字元串是:{0}", strText);

            string str1 = myRSA.Encrypt("123456");
            Console.WriteLine("加密後的字元串:{0}", str1);

            string str2 = myRSA.Decrypt(str1);
            Console.WriteLine("解密後的字元串:{0}", str2);
View Code

 


您的分享是我們最大的動力!

更多相關文章
  • (雙擊全屏播放) 1、安裝vsftpd yum install -y vsftpd 2、編輯ftp配置文件 vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #關閉匿名登錄 chroot_local_user=YES #用於指定用戶列表文件中的用戶是否允許 ...
  • 老師在講C#實戰項目時所使用的SqlHelper,使用的資料庫時SQL Server ...
  • 0x00.問題 netcoreapp2.2環境下, Startup.cs 代碼配置如下 運行輸出警告:“ConsoleLoggerExtensions.AddConsole(ILoggerFactory)”已過時:“This method is obsolete and will be remove ...
  • shanzm 2019年8月23日 19:59:46 [TOC] 1. 可空類型修飾符(T?) 強類型語言中引用類型可以為空,如: 而你若是定義一個值類型為空,則是會報錯的。 然而,在處理資料庫和其他包含可能未賦值的元素的數據類型時,我們希望可以將 null 賦值給數值類型或布爾型的功能特別有用。例 ...
  • 恢復內容開始 PCM音頻網路流播放,至於用處,就不多解釋了。 一個簡單的類,基於NAudio,一個簡單的拼裝類,實例化時三個參數,依次是採樣率,系統播放設備Index,播放聲道,調用PlayData方法傳入PCM的音頻流即可,有流就傳進去,數據斷了,播放自動停。 接下來把代碼貼出來: 1 publi ...
一周排行
  • 首先給大家介紹一下序列化是用來乾什麼的,他為什麼出現 序列化這種技術說到底其實就是把臨時數據保存在電腦上。大家都知道對於程式而言對象是一種稍縱即逝的數據,不僅僅是程式重啟、電腦重啟,就連內部函數的變化也有可能導致對象的消失,但是總有一些對象是大家不想讓其隨意消失的並且想在下一次開啟程式的時候進行載入 ...
  • 一、前言 在.Net Framework框架有專門獲取webconfig配置的方法供我們使用,但是在.Net Core或者.Net Standard中沒有可以直接使用的方法來獲取配置文件信息,下麵就來實現獲取配置信息。 二、獲取配置信息的實現 在.Net Core中,他的配置信息的載體是一個json ...
  • 你一定看過這篇文章 《進擊的 Java ,雲原生時代的蛻變》, 本篇文章的靈感來自於這篇文章。北京時間9.24 就將正式發佈.NET Core 3.0, 所以寫下這篇文章讓大家全面認識.NET Core。.NET 生態系統是一個不斷變化的生態圈,我相信它正在朝著一個偉大的方向發展。正好 最近 Inf... ...
  • 參考文檔:Dapper one to many Table C Code pulic List GetPersons(){ var sql = @"SELECT 1 AS Id, 'Daniel Dennett' AS Name, 1942 AS Born, 1 AS CountryId, 'Uni ...
  • 非標設備多相機流水線模式緩存圖片(C/S客戶端,c 開發語言) ​ 本文所說流水線方式下存儲圖像是在軟體測量周期慢於圖片周期前提下講解的,如果軟體一直在等待圖片數據,邏輯就沒有那麼複雜。 1、非標設備項目,常規模式測量流程 常規模式下,相機採集圖像信號由上位機控制(無論軟觸發、硬觸發)。每個周期內的 ...
  • 簡單創建.NET Core WebApi:https://www.cnblogs.com/yanbigfeg/p/9197375.html 登陸驗證四種方式:https://www.cnblogs.com/zuowj/p/5123943.html 解決跨域的8種方法:https://blog.csd ...
  • 最近有個需求就是網頁表格裡面的數據導出到excel 於是從各位前輩的博客園搜了搜demo 大部分非為兩類 都是用的插件NPOI和Eppluse ,因此在這裡就介紹Eppluse 用法,還有就是在博客的時候 好多有留言說想看從資料庫裡面的數據進行導入 而不是寫死的,所以我就以我的案例給大家分享下用法( ...
  • 表達式樹練習實踐:C 值類型、引用類型、泛型、集合、調用函數 [TOC] 一,定義變數 C 表達式樹中,定義一個變數,使用 。 創建變數結點的方法有兩種, 兩種方式都是生成 類型 和 都具有兩個重載。他們創建一個 ParameterExpression節點,該節點可用於標識表達式樹中的參數或變數。 ...
  • 就像是.NET Framework WebApi與.NET Core WebApi一樣,.NET Framework MVC與.NET Core MVC的區別,也是框架的之間的區別。本系列先首先從.NET Framework MVC介紹,後面再去介紹.NET Core MVC 狹義MVC: MVC是 ...
  • 緩存的實現 我們不是做第三方比如Redis等的緩存實現,而是根據實際情況,基於C#上做一些環境變數的保存,方便項目使用。 1、系統全局變數 很多時候,在系統運行開始,需要對系統的運行參數進行保存,以便供全局使用。 代碼如下: 這裡使用一個靜態變數的Dictionary來進行保存,所有項目均可以直接獲 ...
x