.NETで簡単に暗号化(2) BearCatのモバイルと音楽のある生活

.NETで簡単に暗号化(2)のページです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--年--月--日 トラックバック(-) コメント(-)

.NETで簡単に暗号化(2)

前回のソースコードでは、暗号化対象、暗号化キー、初期化ベクタの全てがバイト配列になっています。
暗号化キーは文字入力したいし、今回暗号化したいデータ(ユーザ名やパスワード)も文字列なので、そのままでは使えません。

暗号化したいデータについては、文字列をバイト配列に変換するだけ。
targetという変数にUnicodeで暗号化したいデータが入っているとすると、以下のコードでバイト配列に変換できます。

byte[] byteTarget = System.Text.Encoding.Unicode.GetBytes(target);


暗号化キーも同じ方法でバイト配列に変換。
しかし、MSDNによるとRijndaelManagedの実装では暗号化キーは『128 ビット、192 ビット、256 ビットのキー長をサポートします』とあり、この長さに揃える必要があります。
暗号化キーは長いほど強固になるので、ここでは256ビット(32バイト)で実装。
その方法はいろいろありますが、ここではハッシュ関数を利用してみます。
.NET Framework で用意されているハッシュ関数の中で、256ビットの値を生成するSHA256アルゴリズムがここでは適当でしょう。

key という変数にUnicodeで暗号化キー文字列が入っているとすると、以下のコードでバイト配列の暗号化キーが得られます。

System.Security.Cryptography.HashAlgorithm hash = new System.Security.Cryptography.SHA256Managed();
byte[] key256 = hash.ComputeHash(System.Text.Encoding.Unicode..GetBytes(key));

あとは、初期化ベクタ(IV)ですが、これは128ビット長しかサポートされません。
上記と同様に 256ビット(32バイト)のハッシュ値を得た後、1~16バイト目と17~32バイト目をそれぞれ XOR 演算するとかいった方法で無理矢理128ビット長に変換してしまえばいいかな。
スポンサーサイト

2007年07月15日 トラックバック(0) コメント(0)












管理者にだけ公開する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。