Key는 32자리
IV는 16자리인데
해시로 만들어서 사용하는 사람들도 있던데 어느 방법이 더 좋은 건지는 모르겠음
알고리즘보단 일단 간단한 사용법
using UnityEngine;
using System;
using System.Text;
using System.IO;
using System.Security.Cryptography;
public class Crypto
{
public static readonly string key = "01234567890123456789012345678901";
public static readonly string iv = "0123456789012345";
//AES 암호화
public static string AESEncrypt(string input)
{
try
{
RijndaelManaged aes = new RijndaelManaged();
//aes.KeySize = 256; //AES256으로 사용시
aes.KeySize = 128; //AES128로 사용시
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] buf = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
byte[] xXml = Encoding.UTF8.GetBytes(input);
cs.Write(xXml, 0, xXml.Length);
}
buf = ms.ToArray();
}
string Output = Convert.ToBase64String(buf);
return Output;
}
catch (Exception ex)
{
Debug.LogError(ex.Message);
return ex.Message;
}
}
//AES 복호화
public static string AESDecrypt(string input)
{
try
{
RijndaelManaged aes = new RijndaelManaged();
//aes.KeySize = 256; //AES256으로 사용시
aes.KeySize = 128; //AES128로 사용시
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
var decrypt = aes.CreateDecryptor();
byte[] buf = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
{
byte[] xXml = Convert.FromBase64String(input);
cs.Write(xXml, 0, xXml.Length);
}
buf = ms.ToArray();
}
string Output = Encoding.UTF8.GetString(buf);
return Output;
}
catch (Exception ex)
{
Debug.LogError(ex.Message);
return string.Empty;
}
}
}
AES인데 왜 RijndaelManaged를 사용하는지 궁금해서 알아봤는데 (Aes클래스가 따로 존재해도)
- AES는 128 비트의 블록 크기에 대해서만 정의된 Rijndael의 축소 버전입니다.
- Rijndael-256과 Rijndael-192는 AES (Rijndael-128)와 완전히 다른 알고리즘으로 보여야 합니다. 그것들은 본질적으로 양립할 수 없다.
라고 누가 그러더라...
https://stackoverflow.com/questions/748622/differences-between-rijndael-and-aes
'개발 > Unity, C#' 카테고리의 다른 글
Unity UGUI Text에서 특정 단어의 위치 찾기 (0) | 2019.09.12 |
---|---|
Unity Update문에 대해서 (0) | 2019.07.27 |
Unity Invoke vs Coroutine (0) | 2019.07.26 |
C# Enum 사용시 Garbage 문제 (0) | 2019.07.16 |
Unity 2019 LWRP Camera Stacking (0) | 2019.07.14 |