Skip to content

Instantly share code, notes, and snippets.

@DiegoQueiroz
Last active July 24, 2020 16:36
Show Gist options
  • Save DiegoQueiroz/67781ded043f6b7fff0c65d98843a5d7 to your computer and use it in GitHub Desktop.
Save DiegoQueiroz/67781ded043f6b7fff0c65d98843a5d7 to your computer and use it in GitHub Desktop.
-- Para executar esse código é necessário ter acesso ao pacote DBMS_CRYPTO
-- GRANT EXECUTE ON SYS.DBMS_CRYPTO TO <seu_usuario>;
SELECT
LPAD(DBMS_CRYPTO.RANDOMNUMBER, str_size, '0') crypto_rand
FROM
(SELECT 8 str_size FROM dual); -- "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 DBMS_RANDOM, pois é razoávelmente segura para aplicações que necessitam gerar números aleatórios reais, que não devam ser descobertos. O pacote DBMS_RANDOM utiliza apenas uma sequência pseudo-aleatória com base no relógio do sistema que, embora difícil, pode ser descoberta.

O pacote DBMS_CRYPTO gera uma sequencia pseudo-aleatória com base em uma semente aleatória real, obtida da piscina de entropia do sistema.

@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