Deff_Dev
[Unity/C#] Json 저장 및 base-64를 이용한 암호화/복호화 본문
게임 데이터를 저장할 때, Json을 많이 사용하다.
하지만 데이터를 그냥 저장하게 된다면 플레이어가 데이터를 확인하고 임의로 수정할 수 있는 보안 문제가 발생할 수 있습니다.
따라서 Json 데이터를 암호화/복호화하는 과정이 필요하다.
데이터 Json 저장/불러오기
유니티에서는 간단하게 데이터를 Json으로 변환하고 저장/불러오기를 할 수 있다.
using UnityEngine;
using System.IO;
using System;
public class PlayerDataManager : MonoBehaviour
{
private string path;
private void Awake()
{
path = Path.Combine(Application.persistentDataPath, "PlayerData.json");
}
public void DataSave(PlayerSaveData playerData)
{
string json = JsonUtility.ToJson(playerData, true); // 데이터 직렬화
File.WriteAllText(path, encodedJson); // Json 파일 저장
}
public void DataLoad()
{
if (!File.Exists(path)) // 파일이 존재하는지 검사
{
Debug.Log("데이터가 존재하지 않습니다 !");
return;
}
string loadJson = File.ReadAllText(path); // Json파일 읽기
PlayerSaveData playerData = JsonUtility.FromJson<PlayerSaveData>(decodedJson); // 데이터 변환
}
}
JsonUtility 라이브러리를 이용하여 간단하게 데이터를 직렬화/역직렬화할 수 있다.
Json 파일 저장 위치
- Application.persistentDataPath : C:\Users\사용자이름\AppData\LocalLow\회사이름
- Application.streamingAssetsPath : 해당 프로젝트폴더 경로\Assets
- Application.dataPath : 해당 프로젝트폴더
base-64를 이용한 암호화/복호화
base-64 인코딩은 이진 데이터를 문자열로 변환하는 방법이다.
using UnityEngine;
using System.IO;
using System;
public class PlayerDataManager : MonoBehaviour
{
private string path;
private void Awake()
{
path = Path.Combine(Application.persistentDataPath, "PlayerData.json");
}
public void DataSave(PlayerSaveData playerData)
{
string json = JsonUtility.ToJson(playerData, true); // 데이터 직렬화
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(json); // 직렬화된 문자열을 8비트 부호없는 정수로 변환
string encodedJson = Convert.ToBase64String(bytes); // 변환된 바이트 배열을 base-64 인코딩된 문자열로 변환
File.WriteAllText(path, encodedJson); // Json 파일 저장
}
public void DataLoad()
{
if (!File.Exists(path)) // 파일이 존재하는지 검사
{
Debug.Log("데이터가 존재하지 않습니다 !");
return;
}
string loadJson = File.ReadAllText(path); // Json파일 읽기
byte[] bytes = Convert.FromBase64String(loadJson); // base-64 인코딩 문자열을 바이트 배열로 변환
string decodedJson = System.Text.Encoding.UTF8.GetString(bytes); // 변환한 바이트 배열을 문자열로 변환
PlayerSaveData playerData = JsonUtility.FromJson<PlayerSaveData>(decodedJson); // 데이터 변환
}
}
위와 같이 코드를 작성하고 데이터를 Json 파일로 저장해본다.
데이터가 ASCII 문자로 변환되어 저장된 것을 볼 수 있다.
하지만 요즘 해킹 소프트웨어들은 인코딩을 인식하여 자동으로 디코딩을 해주기 때문에 이 방법은 보안성이 없는 방법이다.
보안성을 높이고 싶다면 AES와 같은 암호화 알고리즘을 사용하는 것이 좋다.
[참고 블로그]
'Unity(유니티) > 유니티 공부' 카테고리의 다른 글
[Unity/C#] 확률 구하기 (0) | 2024.06.24 |
---|---|
[Unity/C#] AES 암호화 알고리즘 (0) | 2024.06.23 |
[Unity/C#] HashSet를 이용한 중복 제거 (0) | 2024.06.21 |
[Unity/C#] 오일러(Euler) 회전 이슈 (0) | 2024.06.20 |
[Unity/C#] Character Collider 이슈 (0) | 2024.06.17 |