RANDOM_BYTES() în MySQL

Criptare și hash MySQL 5.6.17+

Returnează un șir de octeți aleatorii, sigur pentru criptografie (chei, token-uri, vectori AES).

Sintaxă
RANDOM_BYTES(lungime)

Ce face RANDOM_BYTES()

RANDOM_BYTES() folosește generatorul de numere aleatorii al bibliotecii SSL, așa că rezultatul este potrivit pentru securitate, spre deosebire de RAND(). Lungimea poate fi între 1 și 1024 de octeți; altă valoare dă eroare.

Rezultatul este binar. Ca să-l afișezi sau să-l trimiți într-un link (de exemplu, un token de resetare a parolei), transformă-l cu HEX() sau TO_BASE64(). Pentru vectorul de inițializare al lui AES_ENCRYPT() folosește 16 octeți.

Parametri

Parametru Descriere
lungime Numărul de octeți (1-1024).

Ce returnează

Un șir binar de lungimea cerută.

Exemple

Exemplul 1: Token aleatoriu, în hexazecimal

SELECT HEX(RANDOM_BYTES(16)) AS token;

Rezultat posibil (diferă la fiecare rulare)

+----------------------------------+
| token                            |
+----------------------------------+
| 9F2C71A4E0B85D3367C1F04A8E2D9B56 |
+----------------------------------+

Exemplul 2: Lungimea rezultatului

Fiecare octet devine două caractere hexazecimale, iar Base64 folosește 4 caractere pentru fiecare 3 octeți.

SELECT LENGTH(RANDOM_BYTES(16)) AS octeti,
       LENGTH(HEX(RANDOM_BYTES(16))) AS caractere_hex,
       LENGTH(TO_BASE64(RANDOM_BYTES(30))) AS caractere_base64;

Rezultat

+--------+---------------+------------------+
| octeti | caractere_hex | caractere_base64 |
+--------+---------------+------------------+
|     16 |            32 |               40 |
+--------+---------------+------------------+

Greșeli frecvente

  • Folosești MD5(RAND()) sau RAND() pentru token-uri de securitate. Valorile lui RAND() sunt previzibile; folosește RANDOM_BYTES().
  • Salvezi rezultatul într-o coloană VARCHAR. Este binar; folosește VARBINARY sau salvează forma HEX().

Comenzi înrudite

  • AES_ENCRYPT() și AES_DECRYPT(): Criptează și decriptează date cu algoritmul AES; fără cheie, datele nu pot fi citite.
  • RAND(): Un număr aleatoriu între 0 (inclusiv) și 1 (exclusiv); cu seed, șirul se repetă.
  • UUID(): Generează un identificator unic universal (UUID versiunea 1), un text de 36 de caractere.