t1. セーブデータの作り方 (簡易暗号化編)

セーブデータの作り方は人それぞれだと思いますが、

大抵先ほどのt0章で紹介した方法か、テキストファイルか何かに保存する方法でしょう。

(ファイルの書き込みの仕方がわからないときはfopenで調べましょう。)

しかしただデータを書いただけではユーザーにファイルを開いて改竄させられてしまう危険性もあり、

このままではよろしくありません。なのでココで簡単な暗号化を勉強しましょう。

まず、暗号化というのはどのようなことでしょうか。

今「500」というデータをファイルに作りたいと思います。

この時、500というデータを特定の鍵となるキー数値を利用して違う値に変換してみます。

暗号化とは、要は数値を特定の計算式で変換することを言います。(暗号化した値を元の値に戻す事を複合化といいます)

「鍵となるキー数値」を利用して違う値に変換し、その値を保存しておく場合や

ソフトそのものに鍵キー数値を設定しておいて、計算されて出された数値のみ記憶する場合があります。

例えば思いっきり単純なたとえ話をします。

500というデータを保存したい時、キー数値を120とします。

500 + 120 = 620として620という新たな数値を作り出して保存します。

ロードする時はこの620という数値を取り出して

620 - 120 = 500として元の500を取り出します。

このキー数値や計算アルゴリズムを複雑化することで、質の高い暗号化を目指します。

まずこの節では簡単な暗号化をやってみます。

排他的論理和、という言葉を聞いた事はあるでしょうか。

http://www.asahi-net.or.jp/~AX2S-KMTN/ref/logicope.html

ここにとてもわかりやすく書いてあるので、知らない人は参考にしてください。

暗号化はこの「排他的論理和」を使って作ってみます。

データをAという定数で排他的論理和をとり、もう一度Aという定数で排他的論理和を取ると元の数に戻ります。

これを利用します。排他的論理はC言語では「^」と書きます。以下のサンプルを見て、実行結果を予測してください。

#include <stdio.h>
 
void main(void){
 
        int key = 0x45af6e5d; //任意の暗号化キー
        int data = 500;
 
        printf("%d\n", data);
 
        data = data^key;
 
        printf("%d\n", data);
 
        data = data^key;
 
        printf("%d\n", data);
}
 
実行結果
 
500
1169125289
500


予測した実行結果と同じものになっていたでしょうか。2つ目に何やらわけのわからない数字が出来ていますが、

これが暗号化キーを用いて排他的論理和を出した数値です。このデータをファイルに記憶させ、

読み込むときはこのデータをもう一度暗号化キーを使って演算子、戻してやればいいのです。

→掲示板で質問する



- Remical Soft -