共有キー暗号方式による暗号化
特徴
* 単一の共有キーを使用してデータの暗号化と複合化を行う * 公開キー暗号方式と比較して高速 ⇒ 大量のデータストリームに対して暗号変換を実行する場合に適している
暗号化アルゴリズム
* 以下の関連記事を参照のこと。http://blogs.yahoo.co.jp/dk521123/36417953.html
暗号化の手順
(1) CryptoServiceProvider のインスタンスを生成 (2) (1)で生成したインスタンスのプロパティ Key, IV の設定 (3) (1)で生成したインスタンスの CreateEncryptorメソッドで、ICryptoTransformインスタンスを得る。 (4) ICryptoTransformのTransformFinalBlockで暗号化する
サンプル
Form1.cs
private void button1_Click(object sender, EventArgs e) { this.label1.Text = Encryption.EncryptText( Encryption.EncryptAlgorithm.Des, this.textBox1.Text, new byte[] { 0, 1, 2, 3, 5, 8, 2, 2 }, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }); }
Encryption.cs
public class Encryption { public enum EncryptAlgorithm { // Advanced Encryption Standard Aes, // Data Encryption Standard Des, // Triple DES TripleDes, // RC2 RcTwo, } // encryptionKey 暗号化するためのキー // encryptionIv入力ストリームを複数のブロックに分けて暗号化をする public static string EncryptText( EncryptAlgorithm algorithm, string target, byte[] encryptionKeys, byte[] encryptionIvs) { switch (algorithm) { case EncryptAlgorithm.Des: using (SymmetricAlgorithm cryptographicServiceProvider = new DESCryptoServiceProvider()) { return Encryption.EncryptText( cryptographicServiceProvider, target, encryptionKeys, encryptionIvs); } case EncryptAlgorithm.TripleDes: using (SymmetricAlgorithm cryptographicServiceProvider = new TripleDESCryptoServiceProvider()) { return Encryption.EncryptText( cryptographicServiceProvider, target, encryptionKeys, encryptionIvs); } case EncryptAlgorithm.RcTwo: using (SymmetricAlgorithm cryptographicServiceProvider = new RC2CryptoServiceProvider()) { return Encryption.EncryptText( cryptographicServiceProvider, target, encryptionKeys, encryptionIvs); } case EncryptAlgorithm.Aes: default: using (SymmetricAlgorithm cryptographicServiceProvider = new AesManaged()) { return Encryption.EncryptText( cryptographicServiceProvider, target, encryptionKeys, encryptionIvs); } } } public static string EncryptText( SymmetricAlgorithm cryptographicServiceProvider, string target, byte[] encryptionKeys, byte[] encryptionIvs) { cryptographicServiceProvider.Key = encryptionKeys; cryptographicServiceProvider.IV = encryptionIvs; using (ICryptoTransform transform = cryptographicServiceProvider.CreateEncryptor()) { byte[] source = Encoding.UTF8.GetBytes(target); byte[] encryptedText = transform.TransformFinalBlock(source, 0, source.Length); return Convert.ToBase64String(encryptedText); } } }
関連記事
Java暗号化/複合化する ~Apache Commonsを使用した場合~
http://blogs.yahoo.co.jp/dk521123/32780473.htmlBouncyCastleライブラリ ~Java暗号ライブラリ~
http://blogs.yahoo.co.jp/dk521123/33256866.htmlC#