.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ビット長に変換してしまえばいいかな。
スポンサーサイト