LoginSignup
11
13

More than 5 years have passed since last update.

Unity C#で暗号化・復号化 メモ

Last updated at Posted at 2017-03-09

良く忘れるのでメモ

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

namespace Musashi.WebApi_v1.Utility
{
    /// <summary>
    /// 暗号化・複合化を行う
    /// </summary>
    public static class Crypt
    {
        private static AesCryptoServiceProvider GetCryptInstance()
        {
            // AES暗号化サービスプロバイダ
            AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
            aes.BlockSize = 128;
            aes.KeySize = 256;
            aes.IV = Encoding.UTF8.GetBytes(任意の文字列);
            aes.Key = Encoding.UTF8.GetBytes(任意の文字列);
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.PKCS7;

            return aes;
        }

        // ラムダ式にしてみる
        public static byte[] CryptProcess(byte[] src, bool isEncrypt)
        {
            // AES暗号化サービスプロバイダ
            AesCryptoServiceProvider aes = GetCryptInstance();

            byte[] isOK = ((Func<byte[]>)(() => {using (ICryptoTransform encrypt = aes.CreateEncryptor()){return encrypt.TransformFinalBlock(src, 0, src.Length);}}))();

            // フラグによって暗号、復号の処理を分ける。
            return isEncrypt == true ?
                ((Func<byte[]>)(() => { using (ICryptoTransform encrypt = aes.CreateEncryptor()) { return encrypt.TransformFinalBlock(src, 0, src.Length); } }))() 
                :
                ((Func<byte[]>)(() => { using (ICryptoTransform decrypt = aes.CreateDecryptor()) { return decrypt.TransformFinalBlock(src, 0, src.Length); } }))();
        }


        /// <summary>
        /// AESで暗号化
        /// </summary>
        public static byte[] Encrypt(byte[] src)
        {
            // AES暗号化サービスプロバイダ
            AesCryptoServiceProvider aes = GetCryptInstance();

            // 暗号化する
            using (ICryptoTransform encrypt = aes.CreateEncryptor())
            {
                return encrypt.TransformFinalBlock(src, 0, src.Length);
            }
        }

        /// <summary>
        /// 文字列をAESで復号化
        /// </summary>
        public static byte[] Decrypt(byte[] src)
        {
            // AES暗号化サービスプロバイダ
            AesCryptoServiceProvider aes = GetCryptInstance();

            // 複号化する
            using (ICryptoTransform decrypt = aes.CreateDecryptor())
            {
                return decrypt.TransformFinalBlock(src, 0, src.Length);
            }
        }
    }
}

参考URL
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.aescryptoserviceprovider(v=vs.110).aspx
http://dalmore.blog7.fc2.com/blog-entry-37.html
http://programmers.high-way.info/cs/aes.html
http://qiita.com/hibara/items/c9096376b1d7b5c8e2ae

テスト
http://csrc.nist.gov/groups/STM/cavp/index.html

規格
https://www.ipa.go.jp/security/rfc/RFC3602JA.html

11
13
2

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
11
13