共有キー暗号方式による暗号化
特徴
* 単一の共有キーを使用してデータの暗号化と複合化を行う * 公開キー暗号方式と比較して高速 ⇒ 大量のデータストリームに対して暗号変換を実行する場合に適している
暗号化アルゴリズム
* 以下の関連記事を参照のこと。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#