加密函数crypt
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。 
 其中 :
| 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
總結
 
                            
                        - 上一篇: Java 11 – ChaCha20-P
- 下一篇: OpenGL glMaterialfv材
