You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

355 lines
12 KiB

using UnityEngine;
using System;
using System.Text;
using System.IO;
public class AsteriskCode : MonoBehaviour
{
public static bool IsRedirect = false;
#region Encrypt & Decrypt
//# using ICSharpCode.SharpZipLib.GZip
//private const string STR_EMPTY = "EM";
//private static readonly byte[] BYTE_EMPTY = Encoding.UTF8.GetBytes("EM");
//private const string KEY_128 = "dftaLxGMrgDBzRoS";
//private const string IV_128 = "RFGmvTn6UKRWdlok";
//// 암호화.
//private static string EncryptAES128(string plain)
//{
// try
// {
// // 바이트로 변환.
// byte[] plainBytes = Encoding.UTF8.GetBytes(plain);
// // 레인달 알고리즘.
// RijndaelManaged rm = new RijndaelManaged();
// // 복호화할 방식과 패딩 방법 일치시킴(AES/CBC/PKCS7).
// rm.Mode = CipherMode.CBC;
// rm.Padding = PaddingMode.PKCS7;
// rm.KeySize = 128;
// //rm.BlockSize = 128;
// MemoryStream memoryStream = new MemoryStream();
// ICryptoTransform encryptor = rm.CreateEncryptor(Encoding.UTF8.GetBytes(KEY_128), Encoding.UTF8.GetBytes(IV_128));
// // Key, IV 값으로 메모리스트림을 이용해 크립토스트림 생성.
// CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
// // 크립토스트림에 바이트 배열을 쓰고 플러시.
// cryptoStream.Write(plainBytes, 0, plainBytes.Length);
// cryptoStream.FlushFinalBlock();
// // 메모리스트림에 담겨있는 암호화된 바이트배열을 담음.
// byte[] encryptBytes = memoryStream.ToArray();
// // base64로 변환.
// string encryptString = Convert.ToBase64String(encryptBytes);
// cryptoStream.Close();
// memoryStream.Close();
// return encryptString;
// }
// catch (Exception e)
// {
// Debug.LogWarning("EncryptAES128: " + e.StackTrace);
// return null;
// }
//}
//// 암호화.
//private static byte[] EncryptAES128Byte(string plain)
//{
// try
// {
// // 바이트로 변환.
// byte[] plainBytes = Encoding.UTF8.GetBytes(plain);
// // 레인달 알고리즘.
// RijndaelManaged rm = new RijndaelManaged();
// // 복호화할 방식과 패딩 방법 일치시킴(AES/CBC/PKCS7).
// rm.Mode = CipherMode.CBC;
// rm.Padding = PaddingMode.PKCS7;
// rm.KeySize = 128;
// //rm.BlockSize = 128;
// MemoryStream memoryStream = new MemoryStream();
// ICryptoTransform encryptor = rm.CreateEncryptor(Encoding.UTF8.GetBytes(KEY_128), Encoding.UTF8.GetBytes(IV_128));
// // Key, IV 값으로 메모리스트림을 이용해 크립토스트림 생성.
// CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
// // 크립토스트림에 바이트 배열을 쓰고 플러시.
// cryptoStream.Write(plainBytes, 0, plainBytes.Length);
// cryptoStream.FlushFinalBlock();
// // 메모리스트림에 담겨있는 암호화된 바이트배열을 담음.
// byte[] encryptBytes = memoryStream.ToArray();
// cryptoStream.Close();
// memoryStream.Close();
// return encryptBytes;
// }
// catch (Exception e)
// {
// Debug.LogWarning("EncryptAES128: " + e.StackTrace);
// return null;
// }
//}
//// 복호화.
//private static string DecryptAES128(string encrypt)
//{
// try
// {
// // base64를 바이트로 변환.
// byte[] enctyptBytes = Convert.FromBase64String(encrypt);
// // 레인달 알고리즘.
// RijndaelManaged rm = new RijndaelManaged();
// // 암호화한 방식과 패딩 방법 일치시킴(AES/CBC/PKCS7).
// rm.Mode = CipherMode.CBC;
// rm.Padding = PaddingMode.PKCS7;
// rm.KeySize = 128;
// //rm.BlockSize = 128;
// MemoryStream memoryStream = new MemoryStream(enctyptBytes);
// ICryptoTransform decryptor = rm.CreateDecryptor(Encoding.UTF8.GetBytes(KEY_128), Encoding.UTF8.GetBytes(IV_128));
// // Key, IV 값으로 메모리스트림을 이용해 크립토스트림 생성.
// CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
// // 복호화된 데이터를 담을 바이트 배열 선언.
// byte[] plainBytes = new byte[enctyptBytes.Length];
// int plainCount = cryptoStream.Read(plainBytes, 0, plainBytes.Length);
// // 복호화된 바이트 배열을 string으로 변환.
// string plainString = Encoding.UTF8.GetString(plainBytes, 0, plainCount);
// cryptoStream.Close();
// memoryStream.Close();
// return plainString;
// }
// catch (Exception e)
// {
// Debug.LogWarning("DecryptAES128: " + e.StackTrace);
// return null;
// }
//}
//// 복호화.
//private static byte[] DecryptAES128Byte(string encrypt)
//{
// try
// {
// // base64를 바이트로 변환.
// byte[] enctyptBytes = Convert.FromBase64String(encrypt);
// // 레인달 알고리즘.
// RijndaelManaged rm = new RijndaelManaged();
// // 암호화한 방식과 패딩 방법 일치시킴(AES/CBC/PKCS7).
// rm.Mode = CipherMode.CBC;
// rm.Padding = PaddingMode.PKCS7;
// rm.KeySize = 128;
// //rm.BlockSize = 128;
// MemoryStream memoryStream = new MemoryStream(enctyptBytes);
// ICryptoTransform decryptor = rm.CreateDecryptor(Encoding.UTF8.GetBytes(KEY_128), Encoding.UTF8.GetBytes(IV_128));
// // Key, IV 값으로 메모리스트림을 이용해 크립토스트림 생성.
// CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
// // 복호화된 데이터를 담을 바이트 배열 선언.
// byte[] plainBytes = new byte[enctyptBytes.Length];
// int plainCount = cryptoStream.Read(plainBytes, 0, plainBytes.Length);
// cryptoStream.Close();
// memoryStream.Close();
// return plainBytes;
// }
// catch (Exception e)
// {
// Debug.LogWarning("DecryptAES128: " + e.StackTrace);
// return null;
// }
//}
//// 서버 전송용 변환.
//public static byte[] EncryptJson(string jsontext)
//{
// try
// {
// if (string.IsNullOrEmpty(jsontext))
// return BYTE_EMPTY;
// string strbody = EncryptAES128(jsontext);
// if (string.IsNullOrEmpty(strbody))
// return BYTE_EMPTY;
// // 암호화한 문자열을 body에 넣어 json 변환.
// strbody = JsonUtility.ToJson(new jBody(strbody));
// if (string.IsNullOrEmpty(strbody))
// return BYTE_EMPTY;
// return Encoding.UTF8.GetBytes(strbody);
// }
// catch (Exception e)
// {
// Debug.LogWarning("EncryptJ: " + e.StackTrace);
// return BYTE_EMPTY;
// }
//}
//// 서버 응답 변환.
//public static string DecryptJson(string jsontext)
//{
// try
// {
// if (string.IsNullOrEmpty(jsontext))
// return STR_EMPTY;
// // 복호화할 문자열을 body형식 json에서 변환.
// string strbody = JsonUtility.FromJson<jBody>(jsontext).body;
// if (string.IsNullOrEmpty(strbody))
// return STR_EMPTY;
// strbody = DecryptAES128(strbody);
// if (string.IsNullOrEmpty(strbody))
// return STR_EMPTY;
// return strbody;
// }
// catch (Exception e)
// {
// Debug.LogWarning("DecryptJ: " + e.StackTrace);
// return STR_EMPTY;
// }
//}
//// 서버 전송용 변환.
//public static byte[] CompEncryptJson(object obj)
//{
// string jsontext = JsonUtility.ToJson(obj);
// return BYTE_EMPTY;
//}
#endregion Encrypt & Decrypt
#region Compress & Decompress
//# using ICSharpCode.SharpZipLib.GZip
//public static string Decompress(byte[] contents)
//{
// using (var memoryStream = new MemoryStream())
// {
// Decompress(memoryStream, contents);
// var bytes = memoryStream.ToArray();
// return Encoding.UTF8.GetString(bytes);
// }
//}
//private static void Decompress(Stream stream, byte[] compressedData)
//{
// var buffer = new byte[4096];
// using (var memoryStream = new MemoryStream(compressedData))
// using (var gzipOutputStream = new GZipInputStream(memoryStream))
// {
// for (int r = -1; r != 0; r = gzipOutputStream.Read(buffer, 0, buffer.Length))
// {
// if (r > 0)
// {
// stream.Write(buffer, 0, r);
// }
// }
// }
//}
#endregion
public static object DecodeJson(string contents, Type type)
{
return JsonUtility.FromJson(contents, type);
//#if VER_DEV
// return JsonUtility.FromJson(contents, type);
//#else
// if (IsRedirect)
// return JsonUtility.FromJson(contents, type);
// try
// {
// if (string.IsNullOrEmpty(contents))
// return null;
// // 복호화할 문자열을 body형식 json에서 변환.
// string strbody = JsonUtility.FromJson<jBody>(contents).body;
// if (string.IsNullOrEmpty(strbody))
// return null;
// byte[] bytes = DecryptAES128Byte(strbody);
// if (bytes == null)
// return null;
// contents = Decompress(bytes);
// }
// catch (Exception e)
// {
// Debug.LogWarning("DecryptJ: " + e.StackTrace);
// return null;
// }
// return JsonUtility.FromJson(contents, type);
//#endif
}
public static T DecodeJson<T>(string contents)
{
return JsonUtility.FromJson<T>(contents);
//#if VER_DEV
// return JsonUtility.FromJson<T>(contents);
//#else
// if (IsRedirect)
// return JsonUtility.FromJson<T>(contents);
// try
// {
// if (string.IsNullOrEmpty(contents))
// return default(T); // value 타입일 경우 0, reference 타입일 경우 null 리턴.
// // 복호화할 문자열을 body형식 json에서 변환.
// string strbody = JsonUtility.FromJson<jBody>(contents).body;
// if (string.IsNullOrEmpty(strbody))
// return default(T);
// byte[] bytes = DecryptAES128Byte(strbody);
// if (bytes == null)
// return default(T);
// contents = Decompress(bytes);
// }
// catch (Exception e)
// {
// Debug.LogWarning("DecryptJ: " + e.StackTrace);
// return default(T);
// }
// return JsonUtility.FromJson<T>(contents);
//#endif
}
public static byte[] EncodeJson(object obj)
{
string jsontext = JsonUtility.ToJson(obj);
return Encoding.UTF8.GetBytes(jsontext);
//#if VER_DEV
// return Encoding.UTF8.GetBytes(jsontext);
//#else
// if (IsRedirect)
// return Encoding.UTF8.GetBytes(jsontext);
// return EncryptJson(jsontext);
//#endif
}
public static byte[] EncodeString(string jsontext)
{
return Encoding.UTF8.GetBytes(jsontext);
//#if VER_DEV
// return Encoding.UTF8.GetBytes(jsontext);
//#else
// if (IsRedirect)
// return Encoding.UTF8.GetBytes(jsontext);
// return EncryptJson(jsontext);
//#endif
}
}