.NET ROOM.NET ROOMトップへCOMRADE総合トップへ
「5:コントロールの設定値を永続化する」へ

暗号

 今回は、.NET Frameworkクラスライブラリを利用した「暗号」に関して、ざっと紹介したいと思います。
暗号は複雑な分野なので、アルゴリズムの詳細などのより詳しい情報が知りたい場合は
関連書籍などを参照してください。

  まず、暗号に関するクラスは「System.Security.Cryptography」ネームスペース以下に
まとめられています。

  一般的な暗号や、ハッシュのアルゴリズムはほぼ網羅されています。

・公開鍵方式:DSA、RSA
・秘密鍵方式:DES、TripleDES、Rijndael(AES)、RC2
・Hashアルゴリズム:MD5、SHA1など


使い方は、.NET Frameworkクラスライブラリのほかのクラス同様、
インターフェイスをベースにしたオブジェクト指向で抽象化されています。
たとえば、暗号化/複合化の際のデータの受け渡しは、
「CryptoStream」というStreamクラスの派生クラスを利用します。
そのため、実際にデータが暗号化/復号化されている部分は、
一見すると単純なStreamへの書き込みのように見えます。
これまでC言語などで暗号化/復号化を行なっていた場合は多少とまどいますが、
慣れてしまうと、非常に使いやすくなっていると言えるでしょう。

 以降では、共通鍵方式の暗号化/復号化の手順を簡単に説明
してゆきます。

手順1: 1sSymmetricAlgorithmの派生クラスのインスタンスを作成します。

手順2: 鍵、暗号化のモード(CipherMode)、パディングのアルゴリズム、
アルゴリズム固有のパラメータなど、さまざまな情報を設定します。

手順3: 暗号化の場合はCreateEncryptorメソッド、復号化の場合はCreateDecryptorメソッドを
利用して、暗号化/復号化の際に働く、ICryptoTransformオブジェクトを作成します。

手順4: CryptoStreamのコンストラクタに、もとになるStreamオブジェクトと
ICryptoTransformオブジェクト、およびCryptoStreamへのアクセスは
書き込みなのか読み込みなのか(CryptoStreamMode)を指定して、
CryptoStreamを作成します。

手順5: 通常のStream同様にStreamに対してデータを書き込みます。
CryptoStreamへの書き込みは、自動的に暗号化/複合化されます。

手順6: 最後に、通常のStream同様に、Closeメソッドを呼びます。
Closeメソッドの中からFlushFinalBlockメソッドが自動的に呼び出され、
最後のブロックが書き込まれます。


.NET Frameworkクラスライブラリで暗号を扱うのはこれまでよりも敷居が低くなっていると思います。
いろいろなものに暗号をかけて遊んでみるのもよいでしょう
(ただし、鍵を失くさないようにしてください……)。


前へ | ページトップへ | 次へ