Geração de tokens, checksums e identificadores estilo UUID em Bern puro.
import crypto
Um token alfanumérico aleatório do comprimento dado.
crypto_random_token(12) -- Saída: "a8Kx2Mq0Zb1p" (exemplo)
Texto hexadecimal aleatório, dois caracteres por byte pedido.
crypto_random_hex(8) -- Saída: (16 chars hex, ex.: "3f0a9c12bb47de08")
Um checksum de 32 bits estilo Adler do texto.
crypto_checksum32("bern")
-- Saída: (um inteiro de 32 bits)
O checksum renderizado como uma string hex de 8 caracteres - útil como impressão digital curta do conteúdo.
crypto_hash32_hex("bern")
-- Saída: (8 chars hex)
crypto_hash32_hex("bern") == crypto_hash32_hex("bern")
-- Saída: true (mesma entrada → mesmo hash)
Compara duas strings com varredura de comprimento fixo para reduzir vazamento de tempo.
crypto_secure_compare("token123", "token123")
-- Saída: true
crypto_secure_compare("token123", "token124")
-- Saída: false
Um identificador aleatório no formato de um UUID v4.
crypto_uuid_v4_like() -- Saída: "3f1a9c20-8b4e-4d77-9a2c-1e5f0b7c3d92" (exemplo)
Um padrão comum é emitir um ID junto com uma impressão digital e depois verificá-lo com uma comparação de tempo constante:
import crypto -- emitir id = crypto_uuid_v4_like() token = crypto_random_token(16) sig = crypto_hash32_hex(id + token) -- ...depois, verificar um par (id, token) apresentado def verify(id, token, sig) -> crypto_secure_compare(crypto_hash32_hex(id + token), sig) verify(id, token, sig) -- Saída: true verify(id, "token-errado", sig) -- Saída: false