레이블이 c#인 게시물을 표시합니다. 모든 게시물 표시
레이블이 c#인 게시물을 표시합니다. 모든 게시물 표시

2015년 4월 15일 수요일

ICSharpCode.SharpZipLib의 사용

ICSharpCode.SharpZipLib.dll의 Unzip (MemoryStream)
byte[] zipData = new byte[1024];
using (GZipInputStream gzs = new GZipInputStream(new MemoryStream(zipData)))
{
    using (MemoryStream ms = new MemoryStream())
    {
        const int count = 4096;
        byte[] dest = new byte[count];
        for (int length = 0; (length = gzs.Read(dest, 0, count)) > 0; )
            ms.Write(dest, 0, length);
        zipData = ms.ToArray();
    }
}
Unity에 사용한 간단한 unzip 라이브러리, ICSharpCode.SharpZipLib

복수의 파일을 압축하거나 풀수도 있고 다양한 형식을 지원한다.
AssetBundle을 압축하거나 패킷을 압축하는데 활용함.

패킷의 경우 보통 Web에서는 Json위주로 통신하지만 String이다보니 패킷양이 많아지는 경향이 있다.
하여 Json자체를 압축하여 사용하면 패킷통신양을 줄일 수 있다.

출처 : 





JsonFX 사용 예 (C#)

using UnityEngine;
using System.Collections;

public static class cJson
{
    public static string Serialize(object obj)
    {
        return JsonFx.Json.JsonWriter.Serialize(obj);
    }

    public static T Deserialize<T>(string str) where T : class
    {
        if (str == null || str == "") return null;

        try
        {
            return JsonFx.Json.JsonReader.Deserialize<T>(str);
        }
        catch (System.Exception e)
        {
            Debug.LogError(e.Message);
            return null;
        }
    }
}
JsonFX의 기본 사용 법

Serialize가 필요한 Class를 매개변수로 넣어 Json형식의 string으로 받음.
Deserialize시 얻어낼 Class를 제네릭으로 받아 Json형식의 string을 매개변수로 넣어 Class 형태로 얻어낸다.

공식사이트는 www.jsonfx.net 이지만, 다운로드 링크가 깨져있음.
dll 다운로드(version 1.4.x) >>JsonFx.Json.dll


2015년 4월 14일 화요일

Rijndael 알고리즘을 이용한 암호화 예제 C#

  • 암호화 모듈
    https://msdn.microsoft.com/ko-kr/library/system.security.cryptography.rijndaelmanaged(v=vs.110).aspx
    using System.Security.Cryptography;
    
    private static readonly int KEYSIZE = 128;
    private static readonly int BLOCKSIZE = 128;
    
    private readonly RijndaelManaged rijndael = new RijndaelManaged();
    
    rijndael.Mode = CipherMode.CBC;
    rijndael.Padding = PaddingMode.PKCS7;
    rijndael.KeySize = KEYSIZE;
    rijndael.BlockSize = BLOCKSIZE;
    
    // 복호화
    public byte[] decrypt(byte[] inputBuffer)
    {
        return rijndael.CreateDecryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
    }
    // 암호화
    public byte[] encrypt(byte[] inputBuffer)
    {
         return rijndael.CreateEncryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);
    }
Rijndael 알고리즘을 이용한 암호화 처리.

byte[]로 되어 있는 rijndael.Key, rijndael.IV를 키로 사용하여 암호화, 복호화를 진행한다.


홈