снова о паролях (как получить хеш из shadow)

Модератор: Модераторы разделов

FFFFh
Сообщения: 11

снова о паролях

Сообщение FFFFh »

Всем привет. Несколько страничек назад, я уже постил тему связанную с паролями. Задача на текущий момент формулируется так:
в файле /etc/passwd есть такая запись:
root:$1$ZhRet36.$ZkS6RUAXmQr.hOg2az7NN1:12976:0:99999:7:::
(пароль:ffffff)

Мне нужно чтобы я, при вводе пароле в своем приложении, смог бы сравнить его с уже существующим для данного пользователя. В ответах на этот вопрос мне здесь мне посоветовали копать в сторону функции crypt():
Прототип функции crypt выглядит следующим образом: char * crypt(char *passwd, char *salt), где passwd – пароль для шифрования, а salt – два символа привязки. При успешном завершении функция возвращает 13-символьный готовый к употреблению хэш — два символа привязки и 11-символьная хеш-сумма пароля. В моем примере я брал в качестве salt=ZhRet36. (8 символов), а в качестве passwd - значение вводимое пользователь. Так вот возник такой вопрос как же я получу хеш, равный ZkS6RUAXmQr.hOg2az7NN1, если
1. в нем самом уже больше 13 символов;
2. Первые два символа (Zk) должны были быть равны Zh. А это не так.

Если кто уже сталкивался с такой задачей, может быть, если не трудно, указали бы где я ошибаюсь?
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: снова о паролях

Сообщение d_n_k »

у меня вот такой скрипт:

#!/usr/bin/perl
my $k = "ZhRet36";
my $p = "ffffff";
my $c = crypt($p,$k);
print $c."\n";

вернул ZhVFvZa7PL9t2
что-то у тебя не то
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: снова о паролях

Сообщение Asgard »

вот

Код: Выделить всё

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("%s\n", crypt("ffffff", "$1$ZhRet36.$"));
    exit(0);
}

результат:
$1$ZhRet36.$ZkS6RUAXmQr.hOg2az7NN1


из man 2 crypt:
Modular crypt:
If the salt begins with the string $digit$ then the Modular Crypt Format
is used. The digit represents which algorithm is used in encryption.
Following the token is the actual salt to use in the encryption. The
length of the salt is limited to 8 characters--because the length of the
returned output is also limited (_PASSWORD_LEN). The salt must be termi-
nated with the end of the string (NULL) or a dollar sign. Any characters
after the dollar sign are ignored.

Currently supported algorithms are:

1. MD5
2. Blowfish
3. NT-Hash

Other crypt formats may be easily added. An example salt would be:

$4$thesalt$rest
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
FFFFh
Сообщения: 11

Re: снова о паролях

Сообщение FFFFh »

Asgard писал(а):
15.10.2005 16:25
результат: $1$ZhRet36.$ZkS6RUAXmQr.hOg2az7NN1
...
Currently supported algorithms are:

1. MD5
2. Blowfish
3. NT-Hash

Other crypt formats may be easily added. An example salt would be:
$4$thesalt$rest


Если не трудно, хотелось бы узнать под каким дистрибутивом ты компилировал сорец и с помощью какого алгоритма в crypt получен результат. У меня стоит красная шапка версии 5 с копейками. Там крипт заточен под DES. Такого результата у меня не получается.
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: снова о паролях

Сообщение Asgard »

FFFFh
компилил на FreeBSD. Крипт обычный:
NAME
crypt -- Trapdoor encryption

LIBRARY
Crypt Library (libcrypt, -lcrypt)

SYNOPSIS
#include <unistd.h>

char *
crypt(const char *key, const char *salt);

const char *
crypt_get_format(void);

int
crypt_set_format(const char *string);
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
FFFFh
Сообщения: 11

Re: снова о паролях

Сообщение FFFFh »

Asgard писал(а):
16.10.2005 00:56
компилил на FreeBSD. Крипт обычный:
[

Если не в лом - погляди в /etc/auth.conf что у тебя записано в crypt_default.
Или, если не в лом, опять же выполни crypt_get_format(), она должна вернуть строчку с указанием алгоритма кодирования: 'des', 'blf' md5'.
Чего то мне кажется, у меня шифруется по DES, а salt надо подсовывать в md5. Как ты думаешь, такое возможно?
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: снова о паролях

Сообщение Asgard »

Если не в лом - погляди в /etc/auth.conf что у тебя записано в crypt_default.

crypt_default = md5 des
Или, если не в лом, опять же выполни crypt_get_format()

des
Чего то мне кажется, у меня шифруется по DES, а salt надо подсовывать в md5. Как ты думаешь, такое возможно?

напиши, какой хэш получается у тебя?
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
FFFFh
Сообщения: 11

Re: снова о паролях

Сообщение FFFFh »

Asgard писал(а):
16.10.2005 11:46
напиши, какой хэш получается у тебя?

Завтра напишу - у меня на работе все стоит :)
Спасибо сказали: