Какой метод шифрования используется в/etc/shadow?

Какой метод шифрования используется в /etc/shadow для систем GNU/Linux? Я хотел бы написать небольшую программу для личных целей, которая использует тот же API, но на данный момент я не знаю, с чего начать.

Заранее спасибо

Ответы

Ответ 1

Используйте функцию crypt(3). В glibc используемый метод зависит от соли, если он начинается с:

  • $1 $: он использует MD5.
  • $5 $: используется SHA-256.
  • $6 $: он использует SHA-512.
  • $2a $: он использует blowfish, не поддерживается везде.
  • В противном случае он использует DES.

Ответ 2

Несколько методов шифрования доступны в glibc, см. man 3 crypt, раздел Glibc Notes: http://manpages.courier-mta.org/htmlman3/crypt.3.html

При проверке существующего пароля просто передайте зашифрованную форму как соль; будет использоваться только начальная часть $id $salt. При создании нового пароля инициализируйте id тем, что вам нужно, и поместите некоторые случайные символы в соль.

Ответ 3

базовый пример crypt()

#include <stdio.h>
#include <stdlib.h>

#define MAX_STR 256
#define MAX_SALT 12

int main(int argc, char *argv[]) {
    char password[MAX_STR];
    char salt[MAX_SALT];

    printf("salt: ");
    scanf("%s", salt);

    printf("password: ");
    scanf("%s", password);

    printf("Encrypt '%s' : '%s'\n", password, crypt(password, salt));

    return(EXIT_SUCCESS);
}

Скомпилировать программу:

$ gcc -lcrypt test.c

Ответ 4

Я получаю

undefined ссылка на `crypt '

поэтому я думаю, что вы должны скомпилировать с помощью

$ gcc test.c -lcrypt