Ferramentas para desenvolvedores · Gerador UUID
Como crypto.getRandomValues transforma 16 bytes aleatórios em um UUID v4
· Como funciona
uuid criptografia APIs do navegador
Uma versão 4 UUID é 16 bytes de um gerador criptograficamente seguro com seis bits sobrescritos. Esta postagem percorre os bytes da chamada Web Crypto para a familiar sequência de caracteres 36.
O ID que você precisa antes que o servidor responda — por que a geração do lado do cliente surge em formulários off-line, UI otimista e importações em lote
Um formulário offline pode precisar de um identificador antes que o servidor responda, e uma UI otimista pode criar vários objetos ao mesmo tempo. Um UUIDv4 foi projetado para ser gerado de forma independente, sem um contador central. Não é uma prova de identidade do usuário ou um segredo que você possa colocar com segurança no lugar da autenticação. Se o seu banco de dados precisar de valores classificados por horário de criação, os IDs v4 aleatórios não serão ordenados; essa é uma decisão de esquema separada, e não uma razão para enfraquecer sua aleatoriedade.
O que crypto.getRandomValues realmente faz — preencher um array digitado a partir da fonte de entropia do sistema operacional, não a partir de uma fórmula JavaScript
crypto.getRandomValues preenche um Uint8Array com 16 bytes do gerador aleatório criptograficamente seguro da plataforma do navegador. Não deriva os valores de Date.now() ou Math.random(). O sistema operacional e o navegador implementam a fonte de entropia subjacente, então o código JavaScript recebe bytes em vez de implementar uma fórmula de número aleatório em si. ToolAcre recusa-se a gerar um identificador se sua fonte segura estiver ausente.
Substituindo o byte 6 e o byte 8 — como o nibble da versão se torna 4 e os bits variantes se tornam 10xx, e por que apenas seis bits são perdidos
RFC 9562 descreve um nibble de versão e um campo variante. Começando com dezesseis bytes aleatórios, defina os quatro bits superiores do byte 6 para o binário 0100 (versão 4) e defina os dois bits superiores do byte 8 para 10 (a variante padrão). A implementação usa (byte6 & 0x0f) | 0x40 e (byte8 e 0x3f) | 0x80. Seis bits são substituídos, deixando 122 bits aleatórios no esquema UUIDv4. Esses bits constantes não tornam os bytes restantes menos aleatórios.
De bytes a 8-4-4-4-12 — codificação hexadecimal, saída em minúsculas e posicionamento de hífen conforme o padrão os define
Codifique cada byte como exatamente dois caracteres hexadecimais com um zero à esquerda quando necessário. Insira travessões após 4, 6, 8 e 10 bytes, produzindo os familiares grupos de caracteres hexadecimais 8-4-4-4-12. Uma string v4 válida tem um 4 no início de seu terceiro grupo e um de 8, 9, a ou b no início de seu quarto. A formatação não adiciona entropia; apenas torna o valor subjacente de 128 bits interoperável com ferramentas que esperam o formato de texto UUID.
Exemplo resolvido - um buffer de 16 bytes rastreado por meio de mascaramento e formatação até sua string UUID final
Rastreie os bytes ilustrativos 00 11 22 33 44 55 F6 77 38 99 AA BB CC DD EE FF. Mascarar F6 no byte 6 produz 46; mascarar 38 no byte 8 produz B8. Após formatação hexadecimal minúscula e travessões, o resultado é 00112233-4455-4677-b899-aabbccddeeff. Este é um exemplo de ensino deliberadamente fixo, não um identificador para reutilização na produção. Gere um novo para cada objeto real e compare você mesmo a versão e as posições variantes.
crypto.randomUUID() como atalho de uma chamada — o que o método mais recente faz por você e onde não está disponível
Em uma origem segura, crypto.randomUUID() executa a geração e formatação da v4 em uma chamada. ToolAcre usa-o quando disponível e, caso contrário, recorre a getRandomValues com as operações de bits explícitas acima. A disponibilidade do navegador difere de acordo com o contexto: randomUUID é restrito a contextos seguros, enquanto getRandomValues ainda pode existir em uma página HTTP LAN. Nenhum dos ramos volta para Math.random apenas para manter um botão aparentemente funcionando.
O que isso não cobre – versões baseadas em tempo (v1, v7) e baseadas em nome (v3, v5), que precisam de entradas diferentes de bytes aleatórios
Este mecanismo não descreve identificadores v1 ou v7 baseados em tempo, identificadores v3/v5 baseados em nome ou layouts experimentais v8. UUIDs aleatórios têm uma probabilidade de colisão muito baixa com aleatoriedade sonora, e não uma impossibilidade matemática absoluta de colisão. Um UUID v4 por si só não deve ser usado como uma verificação de controle de acesso ou token de redefinição de senha sem considerar o sigilo, a vida útil e a autorização de forma independente.
Conclusão: a aleatoriedade segura é o trabalho completo — o gerador ToolAcre UUID extrai do mesmo navegador CSPRNG, então o que você copia é o que seu código produziria
A aleatoriedade segura é o trabalho. O gerador ToolAcre UUID usa o CSPRNG do navegador, impõe bits de versão e variante e oferece uma verificação de boa formação para valores copiados. Compare um resultado gerado com o exemplo de layout de bytes e, em seguida, use a saída nova e exclusiva apenas para a função que seu aplicativo realmente atribuiu a ele.