mysql ENCRYPT() + windows
7 отговора
330 прегледа
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(). Има ли начин??
никога не е твърде рано да пропушиш
--- от мануала ---
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(). Има ли начин??
никога не е твърде рано да пропушиш
Re: mysql ENCRYPT() + windows
e, щом никой не знае, значи няма начин => за windows никакви шансове за употреба. майната му.
никога не е твърде рано да пропушиш
никога не е твърде рано да пропушиш
Re: mysql ENCRYPT() + windows
Идеята не беше ли, че от salt зависи crypt() как ще криптира?
И при проверка да се ползва криптираната парола за salt?
Aко ползвам само MD5() еднаквите пароли ще са (логично) еднакво MD5()-нати.
(*)
(**)
вариант 1: crypt()ване в клиента
вариант 2: crypt()ване в sql-a
--------
Ако клиента беше на C щях все някак да го направя, но не е. PHP e, a то от своя страна също има проблеми с crypt() в windowsa:
parola, 01234567890123456789:
`01STgxej5lRmo`
--------------------------------------------------------------------------------
parola, $1$01234567890123456789:
`$1.JPDbjxkqk.`
--------------------------------------------------------------------------------
никога не е твърде рано да пропушиш
И при проверка да се ползва криптираната парола за 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.`
--------------------------------------------------------------------------------
никога не е твърде рано да пропушиш
Re: mysql ENCRYPT() + windows
Е и какво като MD5 hash-овете са ти еднакви за еднаква парола?
Пак е One-Way алгоритъм?
salle.online.bg/sig
Пак е One-Way алгоритъм?
salle.online.bg/sig
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
Ако искаш дръпни си 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
Re: mysql ENCRYPT() + windows
Благодаря за съветите!
Хубавото на този проблем е, че windows-a в случая ми трябва за колкото тестване. Хостнатото няма да е на windows.
А се наложи да тествам на windows, понеже е бъгав драйвера на xfree86 за видеото което имам (вкл. и 4.2.0). Забива, нямам reset на самото дъно. Бавно става рестартването. Няма възможност в BIOSa да го disable-на, за да сложа друго видео и прочее проблеми, които не са за тук.
По-интересен е въпроса как би могло да стане следното - когато знаеш, че ти трябва crypt()a да crypt()ира по определен начин, да се разчита, че за различните платформи ще работи еднакво. Докато четох из онлайн-мановете (май в php беше) в някои коментари беше споменато md5_crypt(), което не намерих да съществува.
Както и да е. Ще прочета линковете. Дано се светна.
никога не е твърде рано да пропушиш
Хубавото на този проблем е, че windows-a в случая ми трябва за колкото тестване. Хостнатото няма да е на windows.
А се наложи да тествам на windows, понеже е бъгав драйвера на xfree86 за видеото което имам (вкл. и 4.2.0). Забива, нямам reset на самото дъно. Бавно става рестартването. Няма възможност в BIOSa да го disable-на, за да сложа друго видео и прочее проблеми, които не са за тук.
По-интересен е въпроса как би могло да стане следното - когато знаеш, че ти трябва crypt()a да crypt()ира по определен начин, да се разчита, че за различните платформи ще работи еднакво. Докато четох из онлайн-мановете (май в php беше) в някои коментари беше споменато md5_crypt(), което не намерих да съществува.
Както и да е. Ще прочета линковете. Дано се светна.
никога не е твърде рано да пропушиш