使用给定算法解密消息

时间:2012-12-03 16:44:42

标签: c algorithm encryption

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

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

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

1 个答案:

答案 0 :(得分:4)

这是一个简单的替换,例如用于密码拼图。它可以通过letter frequency analysis来解决。

存在automated solvers。该示例的原始文本是:

  圣诞节前一周,你可以穿过整个房子   听到我用鼠标击打电脑。磁盘挂了进去   小心的磁盘驱动器,不用说,我几乎拔出了我的   头发。那天晚上我放弃了,准备睡觉了,想知道,   “我应该买卡片吗?”妈妈和爸爸刚刚打了   干草,所以我告诉他们晚安,然后继续前进。