Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125831
  • 博文数量: 1
  • 博客积分: 2576
  • 博客等级: 少校
  • 技术积分: 460
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-19 10:59
文章分类

全部博文(1)

文章存档

2008年(1)

我的朋友
最近访客

分类: C/C++

2008-05-28 23:50:36

crypt加密是先选择一个盐串(或者叫种子吧),然后对给出的字串进行加密,得到加密后的密文,同时该盐串被置在密文的前面。
而在做验证时,系统先提取出密文,然后把前面几位(一般是两位)作为盐串,再对用户输入的口令进行加密,最后把加密后的字串和系统中的密文相比较,如果一样,就匹配成功,否则就匹配失败,拒绝登录;
crypt函数原型:
char *crypt (const char *key, const char *salt);


一个加密小例子:

#include
#include
#include
#include

int main(void)

{

printf("salt=\"32\",Key = \"123456\", passwd=%s\n",crypt("123456","32"));
printf("salt=\"ab\",Key = \"123456\", passwd=%s\n",crypt("123456","ab"));
printf("salt=\"cd\",Key = \"123456\", passwd=%s\n",crypt("123456","cd"));
printf("salt=\"ef\",Key = \"123456\", passwd=%s\n",crypt("123456","ef"));
printf("salt=\"efgh\",Key = \"123456\", passwd=%s\n",crypt("123456","efgh"));
return 0;
}

编译:
gcc -lcrypt t.c
####不知道为什么要加-lcrypt选项,不过不加就编译不通过,报错说:
####undefined reference to `crypt'
####我想在函数头里已经包括了,就直接编译行了,谁知还非得加那个选项,哪位大侠给解释一下
得到目标文件:a.out
运行a.out得到如下输出:
salt="32",Key = "123456", passwd=32mNiC0FkBR/U
salt="ab",Key = "123456", passwd=ab01FAX.bQRSU
salt="cd",Key = "123456", passwd=cdxkhQyO32K7Q
salt="ef",Key = "123456", passwd=efpp2bUsfJUAU
salt="efgh",Key = "123456", passwd=efpp2bUsfJUAU

大家可以看到密文的前两位是和salt一样的

另外,那个salt并不一定非得是两个字符,如果超过两个字符,也只取前两个,从倒数第一二行可以看出来。

事实上,登录时系统是先取系统中的加密口令,再把那个口令作为盐串送给crypt函数,对用户输入的密码进行加密,然后再和系统中的加密口令相比较。
阅读(1068) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~