[ソースコード]
using System;
using System.IO;
using System.Text;
using System.Security;
using System.Security.Cryptography;
namespace EncryptAndDecrypt
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
// 鍵は64ビット(8バイト)である必要がある
byte[] key = Encoding.ASCII.GetBytes( "password" );
// 暗号化して保存
EncryptByDES( @"E:\Text.txt", @"E:\Encrypted.txt", key );
// 復号化して保存
DecryptByDES( @"E:\Encrypted.txt", @"E:\Decrypted.txt", key );
}
// DES(Data Encryption Standard)によって暗号化する
static void EncryptByDES( string inputFileName, string encryptedFileName, byte[] encryptionKey )
{
FileStream inputStream;
FileStream encryptedStream;
// 暗号化する対象のFileStreamオブジェクト
inputStream = new FileStream( inputFileName, FileMode.Open, FileAccess.Read );
// 暗号化したものを書き込むためのFileStreamオブジェクト
encryptedStream = new FileStream( encryptedFileName, FileMode.Create, FileAccess.Write );
// DESと呼ばれる方法で暗号化するためのオブジェクト
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
// 鍵は64ビット(8バイト)のバイト配列である必要がある
des.Key = encryptionKey;
// 初期化ベクタ(暗号化と復号化の際には同じIVを必要とする)
des.IV = encryptionKey;
// CryptoStreamオブジェクトを作成する
ICryptoTransform transform = des.CreateEncryptor(); // Encryptorを作成する
CryptoStream cryptoStream = new CryptoStream( encryptedStream, transform, CryptoStreamMode.Write);
// 暗号化する対象をバイト配列として読み込む
int length = (int)inputStream.Length;
byte[] buffer = new byte[length];
inputStream.Read( buffer, 0, length );
// CryptoStreamによって暗号化して書き込む
cryptoStream.Write( buffer, 0, length );
// CryptoStreamを閉じる
cryptoStream.Close();
// FileStreamを閉じる
inputStream.Close();
encryptedStream.Close();
}
// DES(Data Encryption Standard)暗号を復号化する
static void DecryptByDES( string inputFileName, string decryptedFileName, byte[] decryptionKey )
{
FileStream inputStream;
StreamWriter decryptedStream;
// 復号化する対象のFileStreamオブジェクト
inputStream = new FileStream( inputFileName, FileMode.Open, FileAccess.Read );
// 復号化したものを書き込むためのStreamWriterオブジェクト
decryptedStream = new StreamWriter( decryptedFileName, false, Encoding.UTF8 );
// DESと呼ばれる方法で暗号化するためのオブジェクト
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
// 鍵は64ビット(8バイト)のバイト配列である必要がある
des.Key = decryptionKey;
// 初期化ベクタ(暗号化と復号化の際には同じIVを必要とする)
des.IV = decryptionKey;
// CryptoStreamオブジェクトを作成する
ICryptoTransform transform = des.CreateDecryptor(); // Decryptorを作成する
CryptoStream cryptoStream = new CryptoStream( inputStream, transform, CryptoStreamMode.Read);
// CryptoStreamから読み込むためのStreamReaderを作成する
StreamReader reader = new StreamReader( cryptoStream);
// 復号化して書き込む
decryptedStream.Write( reader.ReadToEnd());
// ストリームを閉じる
reader.Close();
cryptoStream.Close();
decryptedStream.Close();
}
}
}
|
[ソースコード]
using System;
using System.IO;
using System.Text;
using System.Security;
using System.Security.Cryptography;
namespace EncryptAndDecrypt
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
// 鍵は任意のビット数で可
byte[] key = Encoding.ASCII.GetBytes( "longlongpassword" );
// 初期化ベクタは8バイト
byte[] iv = Encoding.ASCII.GetBytes( "password" );
// 暗号化して保存
EncryptByRC2( @"E:\Text.txt", @"E:\Encrypted.txt", key, iv );
// 復号化して保存
DecryptByRC2( @"E:\Encrypted.txt", @"E:\Decrypted.txt", key, iv );
}
// RC2アルゴリズムによって暗号化する
static void EncryptByRC2( string inputFileName, string encryptedFileName, byte[] encryptionKey, byte[] iv )
{
FileStream inputStream;
FileStream encryptedStream;
// 暗号化する対象のFileStreamオブジェクト
inputStream = new FileStream( inputFileName, FileMode.Open, FileAccess.Read );
// 暗号化したものを書き込むためのFileStreamオブジェクト
encryptedStream = new FileStream( encryptedFileName, FileMode.Create, FileAccess.Write );
// DESと呼ばれる方法で暗号化するためのオブジェクト
RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();
// 鍵は任意のビット数で可
rc2.Key = encryptionKey;
// 初期化ベクタ(暗号化と復号化の際には同じIVを必要とする)
rc2.IV = iv;
// CryptoStreamオブジェクトを作成する
ICryptoTransform transform = rc2.CreateEncryptor(); // Encryptorを作成する
CryptoStream cryptoStream = new CryptoStream( encryptedStream, transform, CryptoStreamMode.Write);
// 暗号化する対象をバイト配列として読み込む
int length = (int)inputStream.Length;
byte[] buffer = new byte[length];
inputStream.Read( buffer, 0, length );
// CryptoStreamによって暗号化して書き込む
cryptoStream.Write( buffer, 0, length );
// CryptoStreamを閉じる
cryptoStream.Close();
// FileStreamを閉じる
inputStream.Close();
encryptedStream.Close();
}
// RC2アルゴリズムで暗号化されたものを復号化する
static void DecryptByRC2( string inputFileName, string decryptedFileName, byte[] decryptionKey, byte[] iv )
{
FileStream inputStream;
StreamWriter decryptedStream;
// 復号化する対象のFileStreamオブジェクト
inputStream = new FileStream( inputFileName, FileMode.Open, FileAccess.Read );
// 復号化したものを書き込むためのStreamWriterオブジェクト
decryptedStream = new StreamWriter( decryptedFileName, false, Encoding.UTF8 );
// DESと呼ばれる方法で暗号化するためのオブジェクト
RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();
// 鍵は任意のビット数で可
rc2.Key = decryptionKey;
// 初期化ベクタ(暗号化と復号化の際には同じIVを必要とする)
rc2.IV = iv;
// CryptoStreamオブジェクトを作成する
ICryptoTransform transform = rc2.CreateDecryptor(); // Decryptorを作成する
CryptoStream cryptoStream = new CryptoStream( inputStream, transform, CryptoStreamMode.Read);
// CryptoStreamから読み込むためのStreamReaderを作成する
StreamReader reader = new StreamReader( cryptoStream);
// 復号化して書き込む
decryptedStream.Write( reader.ReadToEnd());
// ストリームを閉じる
reader.Close();
cryptoStream.Close();
decryptedStream.Close();
}
}
}
|