Skip to content

Instantly share code, notes, and snippets.

@DiegoQueiroz
Last active July 24, 2020 16:36
Show Gist options
  • Save DiegoQueiroz/8c1330cb60e0c2f2e91e89144a4c9f0a to your computer and use it in GitHub Desktop.
Save DiegoQueiroz/8c1330cb60e0c2f2e91e89144a4c9f0a to your computer and use it in GitHub Desktop.
SELECT
RIGHT(ABS(CAST(CRYPT_GEN_RANDOM(str_size) AS BIGINT)), str_size) crypto_rand
FROM
(select 8 str_size) var; -- "8" é o tamanho da string a ser gerada
@DiegoQueiroz
Copy link
Author

DiegoQueiroz commented Jul 22, 2020

Esta forma de geração é superior a baseada em RAND, pois é razoávelmente segura para aplicações que necessitam gerar números aleatórios reais, que não devam ser descobertos. A função RAND utiliza apenas uma sequência pseudo-aleatória com base no relógio do sistema que, embora difícil, pode ser descoberta.

A função CRYPT_GEN_RANDOM gera uma sequencia pseudo-aleatória com base em uma semente aleatória real, obtida da piscina de entropia do sistema (utiliza como base a Microsoft CryptoAPI).

@DiegoQueiroz
Copy link
Author

Essas funções geram sequências de DÍGITOS (números apenas) e devem ser utilizadas apenas quando essa limitação existir. Se a combinação de letras, números ou até símbolos puder ser considerada, esses métodos NÃO devem ser utilizados, pois são significativamente menos seguros.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment