본문 바로가기

내일배움캠프/[P8-Solo.] Clicker?Clicker!

[TIL 24.06.17] PlayerPrefs 암호화

.

목   차

     


    Hashkey

    사실 처음에는 딱히 보안을 추구할 생각이 없었다. 그냥 신나게 맵 만들고 대강대강 클리커 흉내만 내고 싶었을 뿐이다. 하지만, 혹시 PlayerPrefs가 저장할 때 String값을 키값으로 하는데 애니메이션처럼 이걸 hash로 바꾸면 비용이 줄어드나 라는 의문점에서 hash로 저장하기를 시작했다. 

     

    Hash로 막상 변환을 끝내고 조금 검색해보니 사실 내가 의미없는 짓을 했다는걸 그제야 깨달았다. 어차피 키값이고 Dictionary라 이 방식은 딱히 더 효율적이지는 않다는 것이다. 

     

    하지만 만든게 아깝기 때문에 보안때문에 이렇게 만든 척 하기로 했다. 

    현재의 코드에 조금 더해서 약간의 보안이 가미된 저장법을 만들었다. 

    SHA-256 해시 알고리즘

    SHA-256의 특징: 

    • 고정된 길이 출력
    • 암호학적 강도
    • 단방향 함수
    • 광범위한 사용

    코드는 다음과 같은데, 어디선가 코드스니펫을 가져온거라 아직 완벽히 이해는 못했다...

    즉 여기 써 있는 것 외의 내용은 아직 잘 모르게따!

    //SHA256 인스턴스 생성 -> 이 객체의 해시 알고리즘 이용.
    using (SHA256 sha256Hash = SHA256.Create()) 
    {
        //UTF-8 인코딩으로 바이트 배열로 string 키값 변환. -> 32바이트 길이의 배열이 됨.
        byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(key));
    
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < bytes.Length; i++)
        {
            //각 바이트를 16진수 문자열로 변환.
            builder.Append(bytes[i].ToString("x2"));
        }
        //16진수로 이루어진 StringBuilder를 String으로 변환해 반환.
        return builder.ToString();
    }

     

    SALT 값 더하기

    현재의 KEY값에 임의의 문자열을 더해서 변환하면 보안을 한층 더 높일 수 있다! 

    사실 아직은 잘 모르겠다. 암호학... 어려워... 다음은 예시다.

    string salt = "WRITEsomething여기";
    string saltedKey = key + salt; //key값에 더하기

     아마도 salt인 이유는 요리에 소금을 뿌려 완성하듯이 소금을 뿌려 key값을 추정하기 힘들게 하는 것 같다. 공백, 영어 대소문자, 기호, 외국어 등을 모두 섞어써도 된다고 한다.