以下代码生成一个文本文件,其中包含从不同的可读文本文件派生的编码消息。
#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.
我将尝试对此进行逆向工程,看看我是否可以了解正在发生的事情。欢迎任何猜测!