回 帖 发 新 帖 刷新版面

主题:[原创]给大家一个C编的实例程序:用TC打造自己的黑客字典程序

其实大家看了我这篇文章后,可以举一反三,产生任何组合的字典都能做出来,当然了,这要看大家的本事喽,而且产生字典的速度非常快,希望大家讨论讨论,如果大家要转载此文章的话,请保留作者信息,谢谢。

编译环境:Win98+Turboc C2.0英文版

                        用TC打造自己的字典程序
作者:jhkdiy

  我想做黑客没有人会不知道字典,也没有那位黑客是从来没有用过字典的,因为字典是破解的必备工具,居然它那么重要,有没有想过自己做个试试看呢。别怕字典程序复杂,别怕做字典程序要什么高深的知识,只要你想的到,你就做的到。废话少说,我们用众所周知的Turbo C 2.0来做个字典程序,但话又说回来,这个程序比起那些专业的字典制作程序当然就逊色很多了,不过重要的是我们能学到东西,OK。
让我们来讨论一下密码吧,大多数用户的密码都在8位数以下,我们这个字典程序的密码长度上限就设定在8位,最低当然是1位了,不过有多少人会设自己的密码为一位呀,呵呵,不理了;说说这个字典程序的制作原理吧,假如现在要生成3位数的小写字母密码,第一个当然是aaa了,第二个就是aab跟着是aac、aad、aae……..直到zzz,那么要怎样用程序实现这个功能呢?方法是用for循环,小写字母不是有26个吗,也就是每一位循环26次即可输出字母来,即aaa、aab、aac当到了aaz后,第一位即从a循环到z了,第二、第三位也是如此,这样我们就能生成从aaa到zzz的密码了。大写字母的密码也一样,具体怎样实现呢,别急,我先说说做这个字典程序应掌握的知识:
    1:有关Ascii码的知识,如a对应的Ascii码是多少,数字3对应的又是多少等。
    2:C语言中的字符知识。
    3:C语言中的文件操作知识,如打开文件,写入数据等。
    4:一点键盘控制的知识。
    5:当然是基础知识了,呵呵。
本程序利用了一个关键的知识点,不知大家是否知道小写字母和大写字母之间的Ascii码的关系,字母a的Ascii值是122,而大写字母A的Ascii值是90,a-A=32,b-B=32;
c-C=32…….z-Z=32;由此可见小写字母和大写字母的Ascii值刚好相差32,我们在输出大写字母时只要将小写字母减去32即可输出大写字母。
好了,下面就来看看这个程序的伪代码:


包含相关的头文件
定义常数
int main(void)
  {
    定义相关变量;
    定义一个文件指针;
    清屏;
    提示用户输入一个完整的文件名;/*即包含扩展名或路径*/
    获取和输出文件名;
    提示用户输入字典的最小长度;
    获取字典最小长度;
    /*对字典的最小长度进行校验*/
    while(最小长度<=0 或 >最大字典长度)
    {
         提示用户输入的数有误,并需重新输入;
         获取字典的最小长度;
    }
    提示用户输入字典的最大长度;
    获取字典的最大长度;
    while(输入>最大长度 或 <最小长度)
   {
        提示用户输入有误,并需要重新输入;
        获取字典最大长度;
    }
    提示用户是否包含大写字母;
    如果是则记下;
    /*为写入数据打开一个文件*/
    if(打开文件不成功)
    {
        提示用户打开文件不成功;
        退出本程序;
    }
    提示用户正在制作字典;
    /*以下程序段是字典制作的核心*/
    switch(字典最小长度)
    {
          case 1:
          {
                for(变量=字母a的Ascii码值;变量<=Z的Ascii值;变量++)
                {
                  /*写入文件*/
                  fprintf(文件指针,“%C\n”,变量);
                  if(需要大写字母)
                    {fprintf(文件指针,“%C\n”,变量-32);}
                }
                if(字典最大长度==1)
                {
                    关闭文件指针;
                    break;
                 }
          }
          case 2:
          {
            for循环;
              for循环;
                {
                  fprintf(文件指针,“%C%C\n”,变量1,变量2);
                }
                if(需要大写字母)
                  {fprintf(文件指针,“%c%c\n”,变量1-32,变量2-32);}
                if(字典最大长度==2)
                {
                    关闭文件指针;
                    break;
                }
          }
          case 3:
          {
              同case2,略
          }
          case 4
          {
              同case3,略
          }

          case 5
          {
              /* 制作3位字母和2位数字的密码;*/
          }
          case 6
          {
          /* 制作3位字母和3位数字的密码;*/
          }
          case 7
          {
           /* 制作4位字母和3位数字的密码;*/
          }
          case 8
         {
          /* 制作4位字母和4位数字的密码;*/
          /* 关闭文件指针;*/
          }

}
    提示用户字典制作完成;
    退出程序;
    return 0;
  }


回复列表 (共19个回复)

11 楼

hao

12 楼

呵呵,大家互相学习了,我是刚来这里的。

13 楼

用数组包括所有字符不是更简单?

14 楼

用 n 多个for()累死机器?

15 楼

回去想想怎么可以把自己的代码简化些

16 楼

不错!
  具有一些基本知识在里面...
    新手看起来\学起来会比较好学的
      的确是好贴..

17 楼

很好,能发出这么全面的而且还很有用的东西,值得表扬!

18 楼

如果需要用c++来编一个电子字典程序
需要实现字典的加入,查找,删除等操作并能再屏幕上输出操作前后的结果
又该怎么入手呢?

19 楼

呵呵,不错,只能是循环不能太多的,不然死机是唯一的结果

我来回复

您尚未登录,请登录后再回复。点此登录或注册