LoginSignup
2
2

More than 5 years have passed since last update.

C#でTripleDESで暗号化と複合

Last updated at Posted at 2019-01-09

今更ですが、TripleDES。
Macでdotnet coreで作成。

dotnet new console -o testdes
cd testdes
dotnet restore
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            //準備 =================================================================================

            //key, iv
            byte[] key = Encoding.UTF8.GetBytes("123456789012345678901234"); //半角24文字 196bit
            byte[] iv = Encoding.UTF8.GetBytes("12345678"); //半角8文字 64bit

            //3DES
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

            //文字列
            string srcStr = "hogehoge";
            //出力
            Console.WriteLine("元の文字列: " + srcStr);

            //暗号化処理 ============================================================================

            //byte変換
            byte[] srcByte = Encoding.UTF8.GetBytes(srcStr);

            //MemoryStream
            MemoryStream ms = new MemoryStream();
            //CryptoStream
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);

            cs.Write(srcByte, 0, srcByte.Length);
            cs.Close();

            byte[] encData = ms.ToArray();
            ms.Close();
             
             //普通に出力すると文字化け?するので、Base64でエンコード。
            string encStr = System.Convert.ToBase64String(encData);
            Console.WriteLine("暗号化+Base64: " + encStr);

            //複合処理 ============================================================================
            byte[] encByte = System.Convert.FromBase64String(encStr);

            MemoryStream ms2 = new MemoryStream();
            CryptoStream cs2 = new CryptoStream(ms2, des.CreateDecryptor(key, iv), CryptoStreamMode.Write);

            cs2.Write(encByte, 0, encByte.Length);
            cs2.Close();

            byte[] decByte = ms2.ToArray();
            ms2.Close();

            string decStr = Encoding.UTF8.GetString(decByte);
            Console.WriteLine("複合: " + decStr);
        }
    }
}

dotnet run

元の文字列: hogehoge
暗号化+Base64: cadNJMDQ934XJDU8Tx7b/g==
複合: hogehoge
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2