MySQL функция PASSWORD();

Статус: Offline
Реєстрація: 11.10.2007
Повідом.: 143
MySQL функция PASSWORD();

Если кто знает подскажите пожалуйста command line utilуууу которая генерит такой же хэш как и MySQL функция PASSWORD();

З.Ы эт не md5sum

область применения очень простая, если надо сменить root пас на MySQL не заморачиваемся с mysqld_safe --skip-grant-tables & а просто пишем скрипт который делает что то наподобие sed 's/root\*.*\^B/хэш нового пассворда/g' -i /var/lib/mysql/mysql/user.MYD

Вобщем хэлп товарисчи. Выложу патом скрипт для смены пассворда с входным параметром нового пассворда в plain text
 
блин, сам недавно столкнулся с похожим, но помоему это все-таки md5.
 
Код:
# echo -n testpassword | md5sum
e16b2ab8d12314bf4efbd6203906ea6c  -
а теперь мускл
Код:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=PASSWORD('testpassword') where user="root";
Query OK, 3 rows affected (0,00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select password from user where user='root';
+-------------------------------------------+
| password                                  |
+-------------------------------------------+
| *9F69E47E519D9CA02116BF5796684F7D0D45F8FA | 
| *9F69E47E519D9CA02116BF5796684F7D0D45F8FA | 
| *9F69E47E519D9CA02116BF5796684F7D0D45F8FA | 
+-------------------------------------------+
3 rows in set (0,02 sec)
кхы кхы((((

Но в принципе все не так плохо, дабы особо не заморачивать с поиском утилы я нашел в сырцах файл где описываются все используемые для шифрования функции:

mysql-5.1.45/sql/password.c

собсно вот часть которая нужна:

Код:
/*
    Generate binary hash from raw text string 
    Used for Pre-4.1 password handling
  SYNOPSIS
    hash_password()
    result       OUT store hash in this location
    password     IN  plain text password to build hash
    password_len IN  password length (password may be not null-terminated)
*/

void hash_password(ulong *result, const char *password, uint password_len)
{
  register ulong nr=1345345333L, add=7, nr2=0x12345671L;
  ulong tmp;
  const char *password_end= password + password_len;
  for (; password < password_end; password++)
  {
    if (*password == ' ' || *password == '\t')
      continue;                                 /* skip space in password */
    tmp= (ulong) (uchar) *password;
    nr^= (((nr & 63)+add)*tmp)+ (nr << 8);
    nr2+=(nr2 << 8) ^ nr;
    add+=tmp;
  }
  result[0]=nr & (((ulong) 1L << 31) -1L); /* Don't use sign bit (str2int) */;
  result[1]=nr2 & (((ulong) 1L << 31) -1L);
}


/*
    Create password to be stored in user database from raw string
    Used for pre-4.1 password handling
  SYNOPSIS
    my_make_scrambled_password_323()
    to        OUT store scrambled password here
    password  IN  user-supplied password
    pass_len  IN  length of password string
*/

void my_make_scrambled_password_323(char *to, const char *password,
                                    size_t pass_len)
{
  ulong hash_res[2];
  hash_password(hash_res, password, (uint) pass_len);
  sprintf(to, "%08lx%08lx", hash_res[0], hash_res[1]);
}

Ну и осталось выдрать все что используется из подключеных заголовков и дописать main() которой будут передоваться как входной параметр юзер пассворд и путь к файлу, а он будет либо выдавать хэш либо вхуяривать его сразу в файл

Вобщем кады получу работающий бинарь выкину подхаченый код нуесли кому надо ссно. Скомпилить думаю проблем не будет
 
а в какой файл надо вхуяривать?
и как ?
врядли там plain text
 
Перечитай пожалуйста пст №1 там ответ в какой файл, пост №3 ответ на вопрос как вхуяривать (средствами MySQL) и в каком виде храняться пароли
 
мне интересно готовый хэш как и куда записывать будешь?
 
он же написал
/var/lib/mysql/mysql/user.MYD
 
перечитал исходник, но так и не увидел какой алгоритм юзается. или какой-то свой лисапед?
 
Назад
Зверху Знизу