LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 684|回复: 6

PASSWD SHADOW

[复制链接]
发表于 2003-10-10 12:44:29 | 显示全部楼层 |阅读模式
SHADOW中有被加密过的密码。
它是用那个crypt函数加密的吗?那它的第2个参数是怎么设置的?
发表于 2003-10-10 13:27:24 | 显示全部楼层
man shadow看看
应该会给你提示的
 楼主| 发表于 2003-10-10 15:56:09 | 显示全部楼层
好象没有我需要的提示
 楼主| 发表于 2003-10-10 19:54:35 | 显示全部楼层
看看穷举是否可以。唉
发表于 2003-10-10 20:50:12 | 显示全部楼层
crypt的第二个参数是个字符数组,只取前两个字符,作为crypt以后的密码的字符串的前两个字符,比如:
ps = crypt(key, "lbddd");
返回的ps的前两个字符就是"lb"

shadow文件我还没研究过,反正和crypt返回的结果不一样
 楼主| 发表于 2003-10-10 23:22:08 | 显示全部楼层
#include <stdio.h>
#define _XOPEN_SOURCE
#include <unistd.h>
#include <string.h>
main()
{
        char passwd[13];
        char key[9]="yourpasswd";
        char slat[2];
        char s[2];
        int i='a',j='a';
        int flag=1,iflag=0;
        while(flag){
                s[0]=i;
                s[1]=j;
        slat[0]=s[0];
        slat[1]=s[1];
        char *ps;
        ps=(char *)crypt(key,slat);
        printf("%c\t%c\n",slat[0],slat[1]);
        if(strcmp(ps,"encryptpd")==0)
        {
                printf("%s\n%s\n",key,ps);
                flag=0;
        }
        if(j=='z')
                j='A';
        else if(j=='Z')
                j='.';
        else if(j=='.')
                j='/';
        else if(j=='/')
        {
                if(i=='/')
                        flag=0;
                i++;
                j='a';
                iflag=1;
        }
        else
                j++;
        if(iflag==1&&i=='z'+1)
                i='A';
        else if(iflag==1&&i=='Z'+1)
                i='.';
        else if(iflag==1&&i=='.'+1)
                i='/';
}
}
 楼主| 发表于 2003-10-11 01:29:17 | 显示全部楼层

  1. #include <stdio.h>
  2. #define _XOPEN_SOURCE
  3. #include <unistd.h>
  4. #include <string.h>
  5. main(int argc,char **argv)
  6. {
  7.         if(argc!=3)
  8.                 err_quit("Usage:command passwdfile cryptedpasswd");
  9.         char passwd[13];
  10.         char key[9];
  11.         int passwdfd;
  12.         FILE *passwdfp;
  13.         if((passwdfp=fopen(argv[1],"r"))==NULL)
  14.                 err_quit("Open password file err");
  15. //      if((passwdfd=open(argv[1],O_RDONLY))==-1)
  16. //              err_quit("Password file open err");
  17.         while(fgets(key,sizeof(key),passwdfp))
  18.         {
  19.                 key[strlen(key)]='\0';
  20. //              printf("%s\n",key);
  21.                 getpasswd(key,argv[2]);
  22.         }

  23. }

  24. //##################################################

  25. int err_quit(char *message)
  26. {
  27.         printf("%s\n",message);
  28.         exit(-1);
  29. }

  30. int getpasswd(char *key,char *crypted)
  31. {
  32.         int i='a',j='a';
  33.         char s[2];
  34.         int flag=1,iflag=0;
  35.         char slat[2];
  36.         while(flag){
  37.                 s[0]=i;
  38.                 s[1]=j;
  39.                 slat[0]=s[0];
  40.                 slat[1]=s[1]; char *ps;
  41.                 ps=(char *)crypt(key,slat);
  42.                 //printf("%c\t%c\n",slat[0],slat[1]);
  43.                 if(strcmp(ps,crypted)==0)
  44.                 {
  45.                         printf("Password=\t%s\n",key);
  46.                         flag=0;
  47.                 }
  48.                 if(j=='z')
  49.                         j='A';
  50.                 else if(j=='Z')
  51.                         j='.';
  52.                 else if(j=='.')
  53.                         j='/';
  54.                 else if(j=='/')
  55.                 {
  56.                         if(i=='/')
  57.                         flag=0;
  58.                         i++;
  59.                         j='a';
  60.                         iflag=1;
  61.                 }               
  62.                 else
  63.                         j++;
  64.                 if(iflag==1&&i=='z'+1)
  65.                         i='A';
  66.                 else if(iflag==1&&i=='Z'+1)
  67.                         i='.';
  68.                 else if(iflag==1&&i=='.'+1)
  69.                         i='/';
  70.         }
  71.         i='a',j='a';
  72. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表