//C# AES-256-CBC 加解密
//转载:http://phardera.blogspot.jp/2013/02/c-aes-256-cbc.html
//使用到的名稱空間 :
using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
//程式碼如下,將字串 "text to be encrypted" 加密後解密看結果是否相同 :
public class Encrypt : MonoBehaviour
{
RijndaelManaged rijalg = new RijndaelManaged();
void Awake()
{
//-----------------
//設定 cipher 格式 AES-256-CBC
rijalg.BlockSize = 128;
rijalg.KeySize = 256;
rijalg.FeedbackSize = 128;
rijalg.Padding = PaddingMode.PKCS7;
rijalg.Mode = CipherMode.CBC;
rijalg.Key = (new SHA256Managed()).ComputeHash(Encoding.ASCII.GetBytes("IHazSekretKey"));
rijalg.IV = System.Text.Encoding.ASCII.GetBytes("1234567890123456");
//-----------------
//加密
ICryptoTransform encryptor = rijalg.CreateEncryptor(rijalg.Key, rijalg.IV);
byte[] encrypted;
using (MemoryStream msEncrypt = new MemoryStream())
{
using(CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write("text to be enccrypted");
}
encrypted = msEncrypt.ToArray();
}
}
//-----------------
//加密後的 base64 字串 :
//eiLbdhFSFrDqvUJmjbUgwD8REjBRoRWWwHHImmMLNZA=
Debug.Log(Convert.ToBase64String(encrypted).ToString());
//-----------------
//解密
ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV);
string plaintext;
// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream(encrypted))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
}
}
}
//-----------------
//最後印出字串 "text to be encrypted"
Debug.Log(plaintext);
}
}