XOR演算は、同じ演算を行うと元の値に戻る性質があります。つまり1回目の演算で暗号化、2回目の演算で復号化できることになります。
XOR暗号では、暗号鍵と復号鍵は同じものになります。
スポンサードリンク
「test.dat」というファイルに書かれている暗号情報を読み出す方法です。
#include <stdio.h> #include <string.h> #include <sys/file.h> #define key 1234 #define PASSWORD_STR_LEN 6 int main() { char buf[PASSWORD_STR_LEN + 1]; FILE *file; // ファイルの読み込み file = fopen("test.dat","rb"); int fd = fileno(file); if (file != NULL && flock(fd, LOCK_EX) == 0) { fread(buf,sizeof(buf),1,file); buf[PASSWORD_STR_LEN] = '\0'; flock(fd, LOCK_UN); fclose(file); } // ファイルへ書き出し file = fopen("test.dat","wb"); fd = fileno(file); if (file != NULL && flock(fd, LOCK_EX) == 0) { for (int i=0; i < PASSWORD_STR_LEN; i++) { // XOR演算 fprintf(file, "%c", (char)(buf[i] ^ key)); } flock(fd, LOCK_UN); fclose(file); } return 0; }
g++ -g -Wall angou.cpp
スポンサードリンク
「test.dat」に「secret」というパスワードがXOR演算で暗号化されているとします。
$ cat test.dat ?????? → 暗号化されている $ ./a.out $ cat test.dat secret → 複合化される $ ./a.out ?????? → 暗号化される
スポンサードリンク