良く忘れるのでメモ
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