Функции необратимого шифрования в MySQL (MD5,PASSWORD,SHA1)
В данной публикации будут рассмотрены некоторые функции необратимого шифрования применяемые в СУБД MySQL.
Функция MD5() — производит необратимое шифрование входящих данных по алгоритму MD5 (Message-Digest Algoritm).
Функция принимает на вход строку и возвращает 128-битную контрольную сумму, вычисляемую по алгоритму MD5. Возвращаемое значение — это 32-разрядное шестнадцатиричное число, уникальное для каждой строки. Если строки отличаются хотя бы одним символом, то результат выполнения функции MD5() для этих строк будет разный, для двух одинаковых строк — результат будет всегда одинаков.
Примеры:
mysql> select md5('Roman'), md5('Roman');
+----------------------------------+----------------------------------+
| md5('Roman') | md5('Roman') |
+----------------------------------+----------------------------------+
| b5df36ac79aa6391ffb432b9e5ad7880 | b5df36ac79aa6391ffb432b9e5ad7880 |
+----------------------------------+----------------------------------+
1 row in set (0.00 sec)
mysql> select md5('Roman V'), md5('Roman');
+----------------------------------+----------------------------------+
| md5('Roman V') | md5('Roman') |
+----------------------------------+----------------------------------+
| c8337353085605e2945ad8f94b787dfb | b5df36ac79aa6391ffb432b9e5ad7880 |
+----------------------------------+----------------------------------+
1 row in set (0.00 sec)
Функция PASSWORD() — также производит необратимое шифрование данных, эта функция шифрует пароли пользователей в MySQL в столбце password таблицы привилегий user системной базы данных mysql.
Пример:
mysql> select password('Roman'), password('Roman');
+-------------------------------------------+-------------------------------------------+
| password('Roman') | password('Roman') |
+-------------------------------------------+-------------------------------------------+
| *13F80D80FAC1C0A0FB300C8FCE4E39B232433608 | *13F80D80FAC1C0A0FB300C8FCE4E39B232433608 |
+-------------------------------------------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> select password('Roman V'), password('Roman');
+-------------------------------------------+-------------------------------------------+
| password('Roman V') | password('Roman') |
+-------------------------------------------+-------------------------------------------+
| *6F3290D96EA0CF5D14C521DC4706DA9C37AD67A5 | *13F80D80FAC1C0A0FB300C8FCE4E39B232433608 |
+-------------------------------------------+-------------------------------------------+
1 row in set (0.00 sec)
В старых версиях MySQL использовался менее защищённый алгоритм шифрования, для совместимости в новых версиях есть функция OLD_PASSWORD() — реализующая старый алгоритм шифрования.
Пример:
mysql> select password('Roman'), old_password('Roman');
+-------------------------------------------+-----------------------+
| password('Roman') | old_password('Roman') |
+-------------------------------------------+-----------------------+
| *13F80D80FAC1C0A0FB300C8FCE4E39B232433608 | 797b74f76f364a6d |
+-------------------------------------------+-----------------------+
1 row in set, 1 warning (0.00 sec)
Поскольку функция PASSWORD() используется в системе идентификации MySQL её лучше не использовать для собственных нужд и обойтись функциями SH1() и MD5().
Функция SHA1 — вычисляет 160-битную контрольную сумму с использованием алгоритма SHA1 (Secure Hash Algoritm).
Возвращаемое значение представляет собой 40-разрядное шестнадцатиричное число, либо NULL (в случае когда входной параметр равен NULL).
Пример:
mysql> select sha1('Roman'), sha1('Roman');
+------------------------------------------+------------------------------------------+
| sha1('Roman') | sha1('Roman') |
+------------------------------------------+------------------------------------------+
| 396bd07890bc77d98cce08898143095a50e943a4 | 396bd07890bc77d98cce08898143095a50e943a4 |
+------------------------------------------+------------------------------------------+
1 row in set (0.00 sec)
mysql> select sha1('Roman V'), sha1('Roman');
+------------------------------------------+------------------------------------------+
| sha1('Roman V') | sha1('Roman') |
+------------------------------------------+------------------------------------------+
| 7430a7e8676e3f1a39802dcbbca0e5a8c61ee179 | 396bd07890bc77d98cce08898143095a50e943a4 |
+------------------------------------------+------------------------------------------+
1 row in set (0.00 sec)
Вот и всё.