Unityで暗号化・復号化
code:cs
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.IV = Encoding.UTF8.GetBytes(任意の文字列);
aes.Key = Encoding.UTF8.GetBytes(任意の文字列);
aes.Mode = CipherMode.CBC;
return aes;
}
/// <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);
}
}
}
}
TransformFinalBlockの第3引数は、変換前バイト配列に対して、どこまで変換するか。という値なので、入れる値は変換前基準で良い
他にもいろいろやり方がある
DecryptorをCryptoStreamに食わせて復号するパターン
code:cs
// 暗号化データを渡すためのメモリStreamを生成
MemoryStream msDecrypt = new MemoryStream(Data);
// (5)MemoryStreamを使ってCryptoStreamを生成
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
new TripleDESCryptoServiceProvider().CreateDecryptor(
des3alg.Key,
des3alg.IV),
CryptoStreamMode.Read);
// (6)復号されたバイト・データの領域
// 復号されたデータをStreamから読み出す
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
// (7)バイトのデータをStringに変換する
String Final = new ASCIIEncoding().GetString(fromEncrypt);