본문 바로가기
GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2] 게임 저장 : 베이스64(Base64)로 암호화 저장

by 타락카얀 2021. 2. 23.
728x90

 

 

GAME MAKER 강좌

 

 

KAYAN

 

 

 

 

 

◈ 베이스64(Base64)로 암호화 저장

 

 

베이스64 (Base64)는 2진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환하는 인코딩 방법입니다.

일반적으로 인터넷 상에서 데이터를 암호화한 텍스트 형식으로 주고 받을 때 사용합니다.

 

 

아래 함수를 사용하면 문자열을 base64 형식으로 인코딩 된 문자열로 변환할 수 있습니다.

 

   ◎ base64_encode(string) : 지정한 문자열을 base64 형식으로 인코딩 합니다.

 

암호화한 데이터는 텍스트 형식으로 저장할 수 있습니다.

 

예)

 


   var str, file;


   str = base64_encode(game_data); //인코딩할 문자열


   file = file_text_open_write("save.txt");
   file_text_write_string(file, str);
   file_text_close(file);

 

인코딩한 암호화 데이터는 아래의 함수를 사용하여 다시 원래 문자열로 디코딩할 수 있습니다.

 

   ◎ base64_decode(string) : base64 형식으로 인코딩한 문자열을 원래 문자열로 디코딩 합니다.

 

이 함수는 이전에 base64 형식을 사용하여 인코딩 된 문자열을 다시 원래 문자열로 변환합니다.

 


   var str, file;

   file = file_text_open_read("save.txt");
   str = file_text_read_string(file);
   level_data = base64_decode(str);

   file_text_close(file);

 

이 기능을 사용하면 기존의 데이터 구조체(ds_ 함수)의 데이터를 base64 로 인코딩할 수도 있습니다.

 

 

 

 

 

◈ 데이터 구조체의 텍스트화

 

 

아래의 함수들을 사용하면 기존의 데이터 구조체(ds_ 함수)를 텍스트로 변환 할 수 있습니다.

 

   - 리스트(list)

 

   ◎ ds_list_write(id) : 리스트를 텍스트화 합니다.

   ◎ ds_list_read(id, str) : 지정한 문자열로 부터 리스트로 복원합니다.

 

   - 맵(map)

 

   ◎ ds_map_write(id) : 맵을 텍스트화 합니다.

   ◎ ds_map_read(id, str) : 지정한 문자열로 부터 맵으로 복원합니다.

 

   - 그리드(grid)

 

   ◎ ds_grid_write(index) : 그리드를 텍스트화 합니다.

   ◎ ds_grid_read(id, str) : 지정한 문자열로 부터 그리드로 복원합니다.

 

   - 스택(stack)

 

   ◎ ds_stack_write(id) : 스택을 텍스트화 합니다.

   ◎ ds_stack_read(id, str) : 지정한 문자열로 부터 스택으로 복원합니다.

 

   - 큐(queue)

 

   ◎ ds_queue_write(id) : 큐를 텍스트화 합니다.

   ◎ ds_queue_read(id, str) : 지정한 문자열로 부터 큐로 복원합니다.

 

   - 우선도 큐(priority)

 

   ◎ ds_priority_write(id) : 우선도 큐를 텍스트화 합니다.

   ◎ ds_priority_read(id, str) : 지정한 문자열로 부터 우선도 큐로 복원합니다.

 

 

예를 들어, 리스트 데이터 구조체(ds_list)를 base64로 인코딩하여 텍스트 파일로 저장한다면 아래와 같이

할 수 있습니다.

 


   var str, file, data;


   data=ds_list_write(global.game_list); //암호화할 리스트의 텍스트화


   file = file_text_open_write("save.txt");


   str = base64_encode(data);
   file_text_write_string(file, str);


   file_text_close(file);

 

그리고 base64로 인코딩하여 저장한 리스트 데이터를 다시 base64 디코딩하여 복원할 수도 있습니다.

 


   var str, file, data;


   data="";


   file = file_text_open_read("save.txt");


   str = file_text_read_string(file);
   if !(str == "") { data = base64_decode(str);} //base64 디코딩


   file_text_close(file);


   if !(data==""){
      ds_list_read(global.game_list, data); //저장한 리스트를 복원
   }

 

주의할 것은 데이터 구조체를 텍스트화하거나, 다시 복원할 때의 데이터 구조체 종류가 동일해야 합니다.

예를 들어 리스트를 텍스트화 했다면, 복원 할 때도 반드시 리스트로 복원해야 합니다.

 

 

 

 

 

 

 

300x250

댓글