荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: spectre (Heal the world), 信区: Linux
标  题: [转载] CrackLib 简介及应用举例 (2)            wwwRainbow (转寄)
发信站: BBS 荔园晨风站 (Fri Sep  1 20:25:36 2000), 转信

【 以下文字转载自 spectre 的信箱 】
【 原文由 suplaozi.bbs@smth.org 所发表 】
发信人: JeffreyDong (Jeff), 信区: Security
标  题: CrackLib 简介及应用举例 (2)
发信站: BBS 水木清华站 (Thu Jun 25 19:11:28 1998)



                CrackLib 简介及应用举例 (2)

                                        JeffreyDong



    应用举例
============

    这里我举一个很简单的例子, 试图用很短的篇幅来说明用法.

    char *FascistCheck(char *pw, char *dictpath);

    这是CrackLib中最常用的函数. pw是用户选择的密码, 你要去
    验证它是不是不安全的. dictpath是字典所在路径, 注意, 要
    把文件名中"."之前的部分加上.

    以RedHat 5.1为例, 假设你已正确的安装了CrackLib 2.7和
    FireBird BBS 2.66M. 让我们来看看如何把CrackLib加入BBS
    中去. :-)

    首先, 改写bbs_src目录下的register.c:

    /* ----------- begin ---------- */
    char        *msg;
    /* -----------  end  ---------- */

    ......

    while( 1 ) {
        getdata(0,0,"请设定您的密码 (Setup Password): ",passbuf,PASSLEN,NOECHO,
YEA) ;
        if( strlen( passbuf ) < 4 || !strcmp( passbuf, newuser.userid ) ) {
            prints("密码太短或与使用者代号相同, 请重新输入\n") ;
            continue;
        }
    /* ----------- begin ---------- */
        if (msg = (char*) FascistCheck(passbuf, CRACKLIBPATH)) {
           printf("请另选密码! (%s)\n",msg);
           continue;
        }
    /* -----------  end  ---------- */
        strncpy( newuser.passwd, passbuf, PASSLEN );
        getdata(0,0,"请再输入一次你的密码 (Reconfirm Password): ",passbuf,
PASSLEN,NOECHO,YEA);
        if( strncmp( passbuf, newuser.passwd, PASSLEN ) != 0 ) {
            prints("密码输入错误, 请重新输入密码.\n") ;
            continue;
        }
        passbuf[8] = '\0' ;
        strncpy( newuser.passwd, genpasswd( passbuf ), PASSLEN );
        break;
    }

    begin和end注释所夹部分为改动处, 下同.

    接着改写bbs_src目录下的userinfo.c:

    /* ----------- begin ---------- */
    char        *msg;
    /* -----------  end  ---------- */

    ......

                getdata(i++,0,"请设定新密码: ",buf,PASSLEN,NOECHO,YEA);
            if( buf[0] == '\0' ) {
                prints("\n\n密码设定取消, 继续使用旧密码\n");
                fail++;
                break;
            }
            strncpy(genbuf,buf,PASSLEN) ;
    /* ----------- begin ---------- */
            if (msg = (char*) FascistCheck(buf, CRACKLIBPATH)) {
               printf("\n请另选密码! (%s)\n", msg);
               prints("\n密码设定取消, 继续使用旧密码\n");
               fail++;
               break;
            }
    /* -----------  end  ---------- */
            getdata(i++,0,"请重新输入新密码: ",buf,PASSLEN,NOECHO,YEA);
            if(strncmp(buf,genbuf,PASSLEN)) {
                prints("\n\n新密码确认失败, 无法设定新密码。\n");
                fail++;
                break;
            }

    接着在bbs.h中加入:

    #ifndef CRACKLIBPATH
    #define CRACKLIBPATH "/usr/lib/cracklib_dict"
    #endif

    注意这里是字典所处的位置.

    最后改动bbs的Makefile:

    OS_DEF   = -DLINUX -DTERMIOS
    CC       = gcc
    CFLAGS   = -O2
    /* ----------- begin ---------- */
    LIBS     = -ltermcap -lbsd -lcrack
    /* -----------  end  ---------- */

    然后make, make install就可以了. :-) 很简单, 不是吗?


    更深入的研究
================

    也许会有后续文章, 也许没有了. 更深入的研究要看你了. :-)


--

 使生如夏花之绚烂,死如秋叶之静美.

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.10.144]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.0.108]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店