crypt函数原型及介绍
函数原型
char *crypt(const char *key, const char *salt);
//gcc编译需要使用-lcrypt链接选项
功能:密码及数据加密
描述
crypt()是密码加密函数。它基于标准的加密算法(默认DES算法),但是又加入了可变的因素,加大了密码破解的难度。
参数key
用户的明文,即加密之前数据。
参数salt
两个字符,可以是大小写字母,数字以及‘.’,‘/’这两个字符。接触过信号学的同学可以联想一下椒盐噪声,他的作用就是给加密算法引入随机性,加大破解难度。
glibc2使用salt参数,使该函数支持跟多的加密算法。
如果salt的格式形如$id$salt$,那么id就表示选择的加密算法,salt可以是使最长16字符的噪声。而加密结果将是$id$salt$encrypted。
其中 :
| id | 加密算法 | 密文长度 |
|---|---|---|
| 1 | MD5 | 22 字符 |
| 5 | SHA-256 | 43 字符 |
| 6 | SHA-512 | 86 字符 |
实例
/*file name: passwd_test.c*/
#define _XOPEN_SOURCE
#include <stdio.h>
#include <unistd.h>
#define FMT "%-8s: %-25s encry: %s\n"
//gcc -lcrypt passwd_test.c
int main()
{
char *pass1 = "tianshiMaimeili";
char *pass2 = "tianshiMaimeili";
char *pass3 = "tianshiMaimeili";
char *pass4 = "tianshiMaimeili";
char *pass5 = "tianshiMaimeili";
char *pass6 = "tianshiMaileili";
char *out = NULL;
out = crypt(pass1,"zl");
printf(FMT,"pass1", pass1, out);
out = crypt(pass2,"lz");
printf(FMT, "pass2", pass2, out);
out = crypt(pass3,"$1$.zh.I.l.$");
printf(FMT, "pass3", pass3, out);
out = crypt(pass4,"$5$.zh.I.l.$");
printf(FMT, "pass4", pass4, out);
out = crypt(pass5,"$6$zhIl$");
printf(FMT, "pass5", pass5, out);
out = crypt(pass6,"$6$.zh.I.l.$");
printf(FMT, "pass6",pass6, out);
return 0;
}
gcc -lcrypt passwd_test.c
./a.out
pass1 : tianshiMaimeili encry: zlbQRgcfizjBY
pass2 : tianshiMaimeili encry: lzd9QjwozpGts
pass3 : tianshiMaimeili encry: $1$.zh.I.l.$ZmFb599t.YTRjWLpudQPF/
pass4 : tianshiMaimeili encry: $5$.zh.I.l.$7uAINJiKHgxV8l3hPcn1kWIxXtAseVfaN9nSPhQd5RB
pass5 : tianshiMaimeili encry: $6$zhIl$ZJOWVkKMkztMHUdpW.8YW3Kl5jFsre1lm33w83igvKSnkBSGhC5i856r3XABVVZxTd3GsN0hZ3Ubcd59yGMTj0
pass6 : tianshiMaileili encry: $6$.zh.I.l.$iE7.fptj3xtTl8Tl6ZZaiZ7nRf3JFPKFS5lKAWB.y3GRfdr4JEMgQUpHUpGSjhte9oxJA.UW1x7yLsUoYH/3Z1
格式对齐的不好附张图:
Contact: bigjordon@163.com
crypt()是用于密码加密的函数,基于标准算法并加入盐值以提高安全性。参数key为明文数据,salt是两个字符的噪声字符串,增加加密的随机性。glibc2扩展了加密算法支持。实例中展示了盐值的格式和加密结果结构。
1099

被折叠的 条评论
为什么被折叠?



