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 -