C言語で記述された暗号関連のプログラムのサンプルを紹介します. Linux上で動作確認していますが,Windows上でもそのまま,あるいはわずかな変更のみで動作するものと思います.
暗号ライブラリとして,OpenSSL を用いています.
バーナム暗号によりファイルを暗号化/復号するプログラムです.バーナム暗号は,暗号化する対象 M と同じ長さの鍵 K を用意し,1 文字毎に鍵と暗号化の対象を XOR (排他的論理和) 演算して暗号文 C を生成するものです. 鍵として規則性の無い乱数列 (One-time pad) を用い,鍵の周期を無限大とすれば,この暗号は完全に安全な暗号となります.
ここでは,擬似乱数生成関数により鍵を生成します(任意のファイル内容を鍵として設定することも可能). ソースプログラムは,vernam.c です.
プログラムはコマンドとして起動します.
vernam [-fFile] [-sSeed] {-e|-d} inFile outFile パラメータ: -f[File] : 鍵をファイル File から読み込む. -s[Seed] : 鍵を生成する. Seed : 1 ~ 16文字 -e : 暗号化モード -d : 復号モード inFile : 入力ファイル (または 'stdin') outFile : 出力ファイル (または 'stdout')
コンパイル時の注意点は,以下です.
void getrand(unsigned char *rnd, unsigned char *seed);乱数生成プログラム randgen_aes.c が使えます.