Nyx incluye SHA-256, MD5 y HMAC-SHA256 como funciones integradas respaldadas por el módulo crypto.c del runtime. No se requiere ninguna librería externa ni import — las tres están disponibles en todo programa Nyx.
// Criptografía: SHA-256, MD5 y HMAC-SHA256 // bool -> texto: int_to_string() espera un int y un bool no se convierte solo, // así que la conversión se escribe explícita. fn si_no(b: bool) -> String { if b { return "si" } return "no" } fn main() -> int { // SHA-256 let h1: String = sha256("hello world") print("sha256(\"hello world\"):") print(" " + h1) print(" longitud: " + int_to_string(h1.length()) + " chars") // SHA-256 de string vacío let h_empty: String = sha256("") print("sha256(\"\"):") print(" " + h_empty) // MD5 let m1: String = md5("hello world") print("md5(\"hello world\"):") print(" " + m1) print(" longitud: " + int_to_string(m1.length()) + " chars") // HMAC-SHA256 let key: String = "clave-secreta" let data: String = "mensaje importante" let hmac: String = hmac_sha256(key, data) print("hmac_sha256(key, data):") print(" " + hmac) // Verificar determinismo: mismo input -> mismo hash let a: String = sha256("nyx") let b: String = sha256("nyx") print("sha256 es determinista: " + si_no(a == b)) // Verificar que inputs distintos -> hashes distintos let c: String = sha256("aaa") let d: String = sha256("bbb") print("hashes distintos para inputs distintos: " + si_no(c != d)) return 0 }
sha256("hello world"):
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
longitud: 64 chars
sha256(""):
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
md5("hello world"):
5eb63bbbe01eeed093cb22bb8f5acdc3
longitud: 32 chars
hmac_sha256(key, data):
5f7881b8e97ca2ea9adbf0c50a0ccf6207eb8923b5e91e2810b292f7b20bae18
sha256 es determinista: si
hashes distintos para inputs distintos: siCómo funciona
sha256(s) retorna un string hexadecimal de 64 caracteres en minúsculas — la codificación estándar de un digest de 256 bits (32 bytes). El hash del string vacío e3b0c44... es una constante bien conocida que puede usarse para verificar que el toolchain está calculando correctamente. SHA-256 es adecuado para verificaciones de integridad de datos, hashing de contraseñas (con un KDF apropiado encima) y firmas digitales.
md5(s) retorna un string hexadecimal de 32 caracteres (digest de 128 bits). MD5 ya no se considera criptográficamente seguro en cuanto a resistencia a colisiones, pero sigue siendo ampliamente usado para checksums y claves de caché donde los ataques de colisión no son una preocupación.
hmac_sha256(key, data) calcula un hash con clave que demuestra tanto el contenido de data como el conocimiento de key. Es el primitivo estándar para firmar peticiones de API y verificar JWT. Las aserciones de determinismo al final demuestran una propiedad fundamental de todas las funciones de hash: entradas idénticas siempre producen salidas idénticas.