Unity3D/Encrypt

Unity3D에서 PlayerPrefs 암호화하기

blueasa 2014. 2. 27. 18:20

유니티에서 보통 간단하게 값들을 저장하려면 PlayerPrefs를 많이 씁니다.

물론 로컬에 저장되기 때문에 값이 유저들에게 손쉽게 노출이 되어 변경되기 쉽다는 단점이 있습니다.

 

<PlayerPrefs에 간단한 소개 및 저장위치>

http://docs.unity3d.com/Documentation/ScriptReference/PlayerPrefs.html

 

이를 막기 위해서는 서버에도 값을 저장해서 대조해 본다거나 하는 방법이 필요하겠지만,

간단하게 암호화해서 값이 조작될 경우를 알아내도록 하는 방법이 있습니다.

C#에서 제공하는 라이브러리가 있어 이를 활용해서 만들어 보려고 하다가,

유니티 포럼에 Mudloop란 분이 깔끔하게 클라스로 구현해주셔서 공유하려고 합니다.

저도 덕분에 수고를 많이 줄였거든요 ^^


원리는 secret key 와 private key를 이용해 MD5로 해쉬값을 만들어서,

이를 playerprefs에 저장된 값과 비교하여 일치하는지를 체크하는 방식입니다. 

 

<원본 위치>

http://forum.unity3d.com/threads/26437-PlayerPrefs-Encryption

 

사용법은 간단합니다.

 

우선, https://gist.github.com/ftvs/5299600 에 있는 EncryptedPlayerPrefs.cs를 복붙으로 만듭니다.

 

그리고 아래 키 값을 playerprefs 암호화가 필요한 곳 앞에 넣습니다. (키값은 적당히 바꾸시구요)

아마 start() 같은 곳이 적당하겠죠?

 

  1.         EncryptedPlayerPrefs.keys=new string[5];
  2.         EncryptedPlayerPrefs.keys[0]="23Wrudre";
  3.         EncryptedPlayerPrefs.keys[1]="SP9DupHa";
  4.         EncryptedPlayerPrefs.keys[2]="frA5rAS3";
  5.         EncryptedPlayerPrefs.keys[3]="tHat2epr";
  6.         EncryptedPlayerPrefs.keys[4]="jaw3eDAs"

 

EncryptedPlayerPrefs.cs의 private key 값도 적당히 바꿉니다.


그리고 사용하실 때는 EncryptedPlayerPrefs.SetInt("someKey",value); 와 같이 PlayerPrefs와 동일하게 사용해주시면 됩니다.




출처 : http://ideapot.tistory.com/15


참조 : http://wiki.unity3d.com/index.php/MD5

반응형