mysql ENCRYPT() + windows

7 отговора 330 прегледа
#1

mysql ENCRYPT() + windows

Има ли начин ENCRYPT() да работи и с виндовс?

--- от мануала ---
ENCRYPT(str[,salt])
Encrypt str using the Unix crypt() system call. The salt argument should be a string with two characters. (As of MySQL Version 3.22.16, salt may be longer than two characters.):
mysql> SELECT ENCRYPT("hello");
-> 'VxuFAJXVARROc'

If crypt() is not available on your system, ENCRYPT() always returns NULL. ENCRYPT() ignores all but the first 8 characters of str, at least on some systems. This will be determined by the behavior of the underlying crypt() system call.
---

T.е. няма crypt() => трябва да накавам виндовса да има crypt(). Има ли начин??

никога не е твърде рано да пропушиш
Отговор
в отговор на Xypodilec #2

Re: mysql ENCRYPT() + windows

e, щом никой не знае, значи няма начин => за windows никакви шансове за употреба. майната му.

никога не е твърде рано да пропушиш
Отговор
в отговор на Xypodilec #3

Re: mysql ENCRYPT() + windows

що не ползваш MD5()?

salle.online.bg/sig
Отговор
в отговор на salle #4

Re: mysql ENCRYPT() + windows

Идеята не беше ли, че от salt зависи crypt() как ще криптира?
И при проверка да се ползва криптираната парола за salt?
Aко ползвам само MD5() еднаквите пароли ще са (логично) еднакво MD5()-нати.


(*)

select ENCRYPT('parola', '01234567890123456789');
+-------------------------------------------+
| ENCRYPT('parola', '01234567890123456789') |
+-------------------------------------------+
| 01STgxej5lRmo |
+-------------------------------------------+
1 row in set (0.01 sec)


select ENCRYPT('parola', '01STgxej5lRmo');
+------------------------------------+
| ENCRYPT('parola', '01STgxej5lRmo') |
+------------------------------------+
| 01STgxej5lRmo |
+------------------------------------+
1 row in set (0.00 sec)



(**)

select ENCRYPT('parola', '$1$01234567890123456789');
+----------------------------------------------+
| ENCRYPT('parola', '$1$01234567890123456789') |
+----------------------------------------------+
| $1$01234567$FEO1mtgHduK6u58Q2LUts0 |
+----------------------------------------------+
1 row in set (0.01 sec)

select ENCRYPT('parola', '$1$01234567$FEO1mtgHduK6u58Q2LUts0');
+---------------------------------------------------------+
| ENCRYPT('parola', '$1$01234567$FEO1mtgHduK6u58Q2LUts0') |
+---------------------------------------------------------+
| $1$01234567$FEO1mtgHduK6u58Q2LUts0 |
+---------------------------------------------------------+
1 row in set (0.00 sec)



вариант 1: crypt()ване в клиента

if ( __нов_юзър__ )
{
salt = gen_rand_salt(__опции_за_salt__);
crypted_psw = crypt(psw, salt);
__вкарване_на_usr_&_crypted_psw_в_базата__
}
else
{
__намиране_на_usr_&_crypted_psw__
salt = crypted_psw;
if ( crypted_psw == crypt(psw, salt) )
{
__OK__
}
else
{
__FAILED__
}
}
// ......



вариант 2: crypt()ване в sql-a

if ( __нов_юзър__ )
{
__вкарване_на_usr_&_psw_в_базата__
// да речем така:
// insert into users_table
// (usr, psw)
// values ('pesho', ENCRYPT('peshopsw', __gen_rand_salt__) )
}
else
{
__select_на_usr_&_crypted_psw__
// в select-a при сравнение също се ползва ENCRYPT()
// със crypted_psw_от_базата_ за salt

if ( __намерен__ )
OK
else
FAILED
}
//



--------

Ако клиента беше на C щях все някак да го направя, но не е. PHP e, a то от своя страна също има проблеми с crypt() в windowsa:


<?php

$salt = '01234567890123456789';
$psw = 'parola';
$crpsw = crypt($psw, $salt);

print "$psw, $salt:<br />`$crpsw`<hr />";

$salt = '$1$01234567890123456789';
$psw = 'parola';
$crpsw = crypt($psw, $salt);

print "$psw, $salt:<br />`$crpsw`<hr />";

?>


parola, 01234567890123456789:
`01STgxej5lRmo`
--------------------------------------------------------------------------------
parola, $1$01234567890123456789:
`$1.JPDbjxkqk.`
--------------------------------------------------------------------------------

никога не е твърде рано да пропушиш
Отговор
в отговор на Xypodilec #5

Re: mysql ENCRYPT() + windows

Е и какво като MD5 hash-овете са ти еднакви за еднаква парола?

Пак е One-Way алгоритъм?

salle.online.bg/sig
Отговор
в отговор на salle #6

Re: mysql ENCRYPT() + windows

параноик съм

никога не е твърде рано да пропушиш
Отговор
в отговор на Xypodilec #7

Re: mysql ENCRYPT() + windows

ама .... то MD5 се смята за мноооого по-сигурно от crypt ....

Ако искаш дръпни си 4.0.2 като излезе (другата седмица би трябвало да е на mysql.online.bg)

там има и SHA

можеш да го видиш в документацията: mysql.online.bg/documentation/mysql/bychapter/manual_Reference.html#Miscellaneous_functions

SHA1(string)
SHA(string)
Calculates an SHA1 160 bit checksum for the string, as described in RFC 3174 (Secure Hash Algorithm). The value is returned as a 40 digit hex number, or NULL in case the input argument was NULL. One of the possible uses for this function is as a hash key. You can also use it as cryptographically safe function for storing passwords.

mysql> SELECT SHA1("abc");
-> 'a9993e364706816aba3e25717850c26c9cd0d89d'

SHA1() was added in version 4.0.2, and can be considered a cryptographically more secure equivalent of MD5(). SHA() is synonym for SHA1().



Или пък ако си съвсем параноик (което си е много хубаво) подкарай MySQL със SSL и тогава ще имаш и

AES_ENCRYPT()
AES_DECRYPT()
DES_ENCRYPT()
DES_DECRYPT()

пак там можеш да прочетеш за тях

salle.online.bg/sig
Отговор
в отговор на salle #8

Re: mysql ENCRYPT() + windows

Благодаря за съветите!

Хубавото на този проблем е, че windows-a в случая ми трябва за колкото тестване. Хостнатото няма да е на windows.

А се наложи да тествам на windows, понеже е бъгав драйвера на xfree86 за видеото което имам (вкл. и 4.2.0). Забива, нямам reset на самото дъно. Бавно става рестартването. Няма възможност в BIOSa да го disable-на, за да сложа друго видео и прочее проблеми, които не са за тук.

По-интересен е въпроса как би могло да стане следното - когато знаеш, че ти трябва crypt()a да crypt()ира по определен начин, да се разчита, че за различните платформи ще работи еднакво. Докато четох из онлайн-мановете (май в php беше) в някои коментари беше споменато md5_crypt(), което не намерих да съществува.

Както и да е. Ще прочета линковете. Дано се светна.

никога не е твърде рано да пропушиш
Отговор