1

以下代码生成一个文本文件,其中包含从不同的可读文本文件派生的编码消息。

   #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.

我将尝试对此进行逆向工程,看看我是否可以了解正在发生的事情。欢迎任何猜测!

4

1 回答 1

4

这是一个简单的替换,例如在密码谜题中使用。可以通过字母频率分析来解决。

存在自动求解器。该示例的原文是:

那是圣诞节前一周,整个屋子里你都能听到我用鼠标敲打电脑的声音。磁盘被小心地挂在磁盘驱动器中,不用说,我几乎拔掉了我的头发。那天晚上我放弃了,准备睡觉,想知道,“我应该只买卡吗?” 妈妈和爸爸刚吃完干草,所以我跟他们道了晚安,然后就上路了。

于 2012-12-03T16:52:16.080 回答