プログラム 技術

C#でRSA暗号化・復号化を実装する

以前、暗号化して通信をやり取りするという記事ではAES256という方式を紹介しました
今回はRSAと呼ばれる方式を紹介します

関連記事
データを暗号化してやり取りする(C#とJavaScript) - ナストンのまとめ
データを暗号化してやり取りする(C#とJavaScript) - ナストンのまとめ

業務でJavaScriptとAzureFunctionでデータをやり取りする際に暗号化する必要がありました違う言語での暗 ...

続きを読む

RSA暗号については以下を参考にしてください

参考サイト
RSA暗号とは?仕組みや応用事例を初心者にもわかりやすく解説!|ITトレンド
RSA暗号とは?仕組みや応用事例を初心者にもわかりやすく解説!|ITトレンド

この記事ではRSA暗号の概要から暗号化と復号の流れ、そして応用例まで解説します。RAS暗号化技術への理解を深めてから導入 ...

続きを読む

それぞれの鍵を生成する

RSAを使用する際に必要となる公開鍵と秘密鍵を生成します。今回はファイルとして書き出していますが、使用用途に応じて変更してください

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);

//公開鍵をXML形式で取得
String publicKey = rsa.ToXmlString(false);
//秘密鍵をXML形式で取得
String privateKey = rsa.ToXmlString(true);

byte[] bytesPublicKey = Encoding.UTF8.GetBytes(publicKey);
byte[] bytesPrivateKey = Encoding.UTF8.GetBytes(privateKey);

//公開鍵を保存
FileStream puKey = new FileStream(publicKeyPath, FileMode.Create, FileAccess.Write);
puKey.Write(bytesPublicKey, 0, bytesPublicKey.Length);
puKey.Close();

//秘密鍵を保存
FileStream prKey = new FileStream(privateKeyPath, FileMode.Create, FileAccess.Write);
prKey.Write(bytesPrivateKey, 0, bytesPrivateKey.Length);
prKey.Close();

rsa.Clear();

公開鍵を使用して暗号化する

先ほど生成した公開鍵を使用して暗号化します

StreamReader sr = new StreamReader(publicKeyPath, Encoding.UTF8);
string PublicKey = sr.ReadToEnd();
sr.Close();

// RSACryptoServiceProviderオブジェクトの作成
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);
rsa.FromXmlString(PublicKey);

byte[] data = Encoding.UTF8.GetBytes(_planText);

data = rsa.Encrypt(data, false);

Convert.ToBase64String(data);

秘密鍵を使用して復号化する

今度は先ほど作成した公開鍵を使用して暗号化したものを秘密鍵を使用して復号化します

StreamReader sr = new StreamReader(privateKeyPath, Encoding.UTF8);
string PrivateKey = sr.ReadToEnd();
sr.Close();

// RSACryptoServiceProviderオブジェクトの作成
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);
// 秘密鍵を指定
rsa.FromXmlString(PrivateKey);  

byte[] data = Convert.FromBase64String(_cipherText);

data = rsa.Decrypt(data, false);

Encoding.UTF8.GetString(data);

最後に

実際に実行すると以下のように問題なく、暗号化・復号化できました
今回作成したコードをGitHubにアップしていますので参考にしてみてください

サンプル
BlogSampleCodeProjects/RSAEncrytDecry at main · nasuton/BlogSampleCodeProjects · GitHub
BlogSampleCodeProjects/RSAEncrytDecry at main · nasuton/BlogSampleCodeProjects · GitHub

Project for sample code used in the blog.(Blogで記載しているサンプルコード ...

続きを読む

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

お問い合わせ
お問い合わせ  | アドバンスド・ソリューション株式会社
お問い合わせ | アドバンスド・ソリューション株式会社

お問い合わせはこちら

-プログラム, 技術
-