Всем привет. Несколько страничек назад, я уже постил тему связанную с паролями. Задача на текущий момент формулируется так:
в файле /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. А это не так.
Если кто уже сталкивался с такой задачей, может быть, если не трудно, указали бы где я ошибаюсь?
снова о паролях (как получить хеш из shadow)
Модератор: Модераторы разделов
-
d_n_k
- Сообщения: 636
- ОС: Gentoo GNU/Linux
Re: снова о паролях
у меня вот такой скрипт:
#!/usr/bin/perl
my $k = "ZhRet36";
my $p = "ffffff";
my $c = crypt($p,$k);
print $c."\n";
вернул ZhVFvZa7PL9t2
что-то у тебя не то
#!/usr/bin/perl
my $k = "ZhRet36";
my $p = "ffffff";
my $c = crypt($p,$k);
print $c."\n";
вернул ZhVFvZa7PL9t2
что-то у тебя не то
все сказанное есть имхо...
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: снова о паролях
вот
результат:
из man 2 crypt:
Код: Выделить всё
#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
-
FFFFh
- Сообщения: 11
Re: снова о паролях
Если не трудно, хотелось бы узнать под каким дистрибутивом ты компилировал сорец и с помощью какого алгоритма в crypt получен результат. У меня стоит красная шапка версии 5 с копейками. Там крипт заточен под DES. Такого результата у меня не получается.
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: снова о паролях
FFFFh
компилил на FreeBSD. Крипт обычный:
компилил на 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);
-
FFFFh
- Сообщения: 11
Re: снова о паролях
Если не в лом - погляди в /etc/auth.conf что у тебя записано в crypt_default.
Или, если не в лом, опять же выполни crypt_get_format(), она должна вернуть строчку с указанием алгоритма кодирования: 'des', 'blf' md5'.
Чего то мне кажется, у меня шифруется по DES, а salt надо подсовывать в md5. Как ты думаешь, такое возможно?
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: снова о паролях
Если не в лом - погляди в /etc/auth.conf что у тебя записано в crypt_default.
crypt_default = md5 des
Или, если не в лом, опять же выполни crypt_get_format()
des
Чего то мне кажется, у меня шифруется по DES, а salt надо подсовывать в md5. Как ты думаешь, такое возможно?
напиши, какой хэш получается у тебя?
-
FFFFh
- Сообщения: 11