📄 makepass.c
字号:
/* makepass.c - Make a UNIX password */
/* compile with: gcc -o makepass makepass.c -lcrypt */
/* usage: "makepass 'salt'" */
#include <crypt.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
int is_salt(char *salt)
{
char salts[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
return strlen(salt) == 2 &&
strchr(salts, salt[0]) != 0 && strchr(salts, salt[1]) != 0 &&
salt[0] != '\0' && salt[1] != '\0';
}
int main(int argc, char *argv[])
{
char *clear;
char clear1[9];
char *clear2;
if(argc != 2) {
fprintf(stderr, "Usage: %s salt\n", argv[0]);
return 1;
}
if(!is_salt(argv[1])) {
fprintf(stderr, "(%s) is illegal salt!\n", argv[1]);
return 2;
}
clear = getpass("Password: ");
if(clear == NULL) {
bzero(clear, 8);
fprintf(stderr, "Not a tty!");
return 3;
}
strncpy(clear1, clear, 8);
bzero(clear, 8);
clear2 = getpass("Re-enter password: ");
if(clear2 == NULL) {
bzero(clear2, 8);
fprintf(stderr, "Not a tty!");
return 3;
}
if(strcmp(clear1, clear2) != 0) {
fprintf(stderr, "Sorry, passwords don't match.\n");
bzero(clear1, 8);
bzero(clear2, 8);
return 4;
}
printf("Encrypted password: \"%s\"\n", crypt(clear1, argv[1]));
bzero(clear1, 8);
bzero(clear2, 8);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -