Files
fn_registry/functions/infra/password_hash.md
T
egutierrez 07341aa89f feat: jwt_generate, jwt_validate, password_hash, password_verify
Fase 2 del issue 0010 — auth core:
- jwt_generate/validate: HS256 manual con crypto/hmac + crypto/sha256
- password_hash/verify: wrappers de golang.org/x/crypto/bcrypt (cost 12 default)
- JWT rechaza alg != HS256 para mitigar ataque 'alg=none'
- hmac.Equal para comparacion constant-time de firmas
2026-04-18 17:39:00 +02:00

1.6 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
password_hash function go infra 1.0.0 impure func PasswordHash(password string, cost int) (string, error) Hashea un password con bcrypt. Cost por defecto es 12 (si se pasa 0). El hash resultante incluye el salt y el cost embebidos.
password
hash
bcrypt
auth
infra
false error_go_core
golang.org/x/crypto/bcrypt
name desc
password password en texto plano a hashear
name desc
cost coste bcrypt entre 4 y 14. 0 usa el default 12 (buen balance velocidad/seguridad en 2025)
hash bcrypt en formato $2a$... apto para guardar en BD y verificar con PasswordVerify true
hashea password con cost default
hashea password con cost custom
hashes distintos para mismo password (salt diferente)
functions/infra/password_hash_test.go functions/infra/password_hash.go

Ejemplo

hash, err := PasswordHash(inputPassword, 12)
if err != nil {
    return err
}
db.Exec("INSERT INTO users (email, password_hash) VALUES (?, ?)", email, hash)

Notas

Impura — bcrypt usa entropia del OS para generar salt aleatorio en cada invocacion. El hash producido incluye el salt y el cost embebidos en el string ($2a$12$salt...hash), por lo que PasswordVerify no necesita el cost como parametro aparte. Cost 12 = ~250ms/hash en hardware moderno (2025): suficiente para bloquear ataques por fuerza bruta sin ser insoportable en el login. Para proteccion extra en servidores con mucho CPU disponible se puede subir a 14.