Ce face SHA2()
SHA2() calculează o sumă de control din familia SHA-2. Al doilea argument alege lungimea: 224, 256, 384 sau 512 biți (0 înseamnă tot 256). Rezultatul este un text hexazecimal: 64 de caractere pentru SHA-256, 128 pentru SHA-512.
Este înlocuitorul recomandat pentru MD5() și SHA1(). Pentru o lungime nepermisă, rezultatul este NULL, cu avertisment; pentru un argument NULL, tot NULL.
Parametri
| Parametru | Descriere |
|---|---|
text |
Textul pentru care se calculează suma. |
lungime_biti |
224, 256, 384, 512 sau 0 (= 256). |
Ce returnează
Un text hexazecimal sau NULL.
Exemple
Exemplul 1: Diferite lungimi
SELECT SHA2('abc', 224) AS sha224,
LENGTH(SHA2('abc', 256)) AS lungime_256,
LENGTH(SHA2('abc', 512)) AS lungime_512,
SHA2('abc', 100) AS lungime_gresita;
Rezultat
+----------------------------------------------------------+-------------+-------------+-----------------+
| sha224 | lungime_256 | lungime_512 | lungime_gresita |
+----------------------------------------------------------+-------------+-------------+-----------------+
| 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7 | 64 | 128 | NULL |
+----------------------------------------------------------+-------------+-------------+-----------------+
Warning (Code 1583): Incorrect parameters in the call to native function 'sha2'
Exemplul 2: Detectarea înregistrărilor duplicate
Suma de control a unui text lung poate fi indexată și comparată mult mai ușor decât textul întreg.
CREATE TABLE mesaje (id INT, text TEXT, suma CHAR(64));
INSERT INTO mesaje VALUES
(1, 'Comanda a fost livrată în Iași.', SHA2('Comanda a fost livrată în Iași.', 256)),
(2, 'Plata a fost confirmată.', SHA2('Plata a fost confirmată.', 256)),
(3, 'Comanda a fost livrată în Iași.', SHA2('Comanda a fost livrată în Iași.', 256));
SELECT LEFT(suma, 12) AS inceput_suma, COUNT(*) AS aparitii, GROUP_CONCAT(id) AS id_uri
FROM mesaje
GROUP BY suma
ORDER BY aparitii DESC;
Rezultat
+--------------+----------+--------+
| inceput_suma | aparitii | id_uri |
+--------------+----------+--------+
| 07cee39eb5c4 | 2 | 1,3 |
| b475b70fef40 | 1 | 2 |
+--------------+----------+--------+
Greșeli frecvente
- Salvezi parole doar cu
SHA2(parola, 256). Fără „sare” și fără un algoritm lent, parolele simple se pot afla din tabele precalculate; folosește bcrypt sau Argon2 în aplicație. - Pui rezultatul într-o coloană prea scurtă. SHA-256 are 64 de caractere, SHA-512 are 128.
Comenzi înrudite
MD5(): Calculează suma de control MD5 a unui text (32 de cifre hexazecimale); eliminată din versiunile noi.SHA1() și SHA(): Calculează suma de control SHA-1 a unui text (40 de cifre hexazecimale); eliminată din versiunile noi.AES_ENCRYPT() și AES_DECRYPT(): Criptează și decriptează date cu algoritmul AES; fără cheie, datele nu pot fi citite.