次のコードは、別の読み取り可能なテキスト ファイルから派生したエンコードされたメッセージを含むテキスト ファイルを生成します。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main()
{
FILE *f, *f_enc;
char c, c_enc;
int ind, a[26], r_val;
srandom(time(NULL));
for (ind=0; ind<26; ind++) a[ind]=-1;
for (ind=0; ind<26; ind++){
do
r_val=random()%26;
while (a[r_val]!=-1);
a[r_val]=ind;
}
f=fopen("plain.txt","r");
f_enc=fopen("cipher.txt","w");
while (!feof(f)) {
c=fgetc(f);
if ((c>='A' && c<='Z')||(c>='a' && c<='z')) {
if (c>='A' && c<='Z') c = c + 'a' - 'A';
c=a[c-'a']+'a';
}
fputc(c,f_enc);
}
fclose(f);
fclose(f_enc);
}
私が不明なのは、コードがメッセージをエンコードするために実装している全体的なアルゴリズムです。
- エンコードされた文字を生成するために、文字から ASCII 値 ('a - 'A) を減算していますか?
出力例を以下に示します。
xohq xpu ouuf yubliu spieqxkhq, hzj hcc xpilnap xpu plnqu
tln slncj puhi ku yuhxeza xpu slkmnxui oexp xpu klnqu.
xpu jeqf ohq pnza nm ez xpu jeqf jieru oexp shiu,
hzj, zuujcuqq xl qht, e zuhict mnccuj lnx kt phei.
e ahru nm bli xphx zeapx, alx iuhjt bli yuj,
hzj olzjuiuj, "qplncj e gnqx ynt shijq ezqxuhj?"
khkh hzj jhjjt phj gnqx pex xpu pht,
ql e xlcj xpuk allj zeapx, hzj ouzx lz kt oht.
これをリバースエンジニアリングして、何が起こっているのかを把握できるかどうかを確認します。どんな憶測でも大歓迎!