加密函数crypt

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bigjordon/article/details/54576716

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

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭