C# で 3DES 暗号化・復号化

投稿者: | 2014年6月8日

C#で3DES で暗号化・復号化してみました。

 

初期化ベクタとキーと2つ値が必要なのが分かりにくい所ですね。あとそれらのデータ型がなんなのかも。

using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace TEST.Common.Crypt
{
    public class Crypt
    {
        // 鍵
        // 128 ビットから 192 ビットのキー長を 64 ビット単位でサポート
        // つまり16バイトか24バイト
        //                           1234567890123456
        //private const string CKEY = "bPE7eIw0OZojj0XZ";
        //                           123456789012345678901234
        private const string CKEY = "a7nH8sMrqDeNtiS99jyOzgpF";

        // 初期化ベクタ(8バイト)
        //                           12345678
        private const string CVEC = "lumw7kVi";

        // 暗号化
        public static string Encrypt(string str)
        {
            // 暗号化する文字列を byte 配列に変換
            byte[] src = Encoding.UTF8.GetBytes(str);

            // 暗号用のキー情報をセット
            byte[] desKey = Encoding.UTF8.GetBytes(CKEY);
            byte[] desIV = Encoding.UTF8.GetBytes(CVEC);

            // Tripe DES のサービス プロバイダを生成
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

            // 入出力用のストリームを生成
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);

            // ストリームに暗号化するデータを書き込む
            cs.Write(src, 0, src.Length);
            cs.Close();

            // 暗号化されたデータを byte 配列で取得
            byte[] cryptData = ms.ToArray();
            ms.Close();

            // Base64で文字列に変換
            return System.Convert.ToBase64String(cryptData);
        }

        // 復号化
        public static string Decrypt(string str)
        {
            // Base64から byte 配列に変換
            byte[] src = System.Convert.FromBase64String(str);

            // 暗号用のキー情報をセット
            byte[] desKey = Encoding.UTF8.GetBytes(CKEY);
            byte[] desIV = Encoding.UTF8.GetBytes(CVEC);

            // Tripe DES のサービス プロバイダを生成
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

            // 入出力用のストリームを生成
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write);

            // ストリームに復号化するデータを書き込む
            cs.Write(src, 0, src.Length);
            cs.Close();

            // 復号化されたデータを byte 配列で取得
            byte[] cryptData = ms.ToArray();
            ms.Close();

            // 文字列に変換
            return Encoding.UTF8.GetString(cryptData);
        }
    }
}

 

カテゴリー: C#

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です