Libreria
Sicurezza
Impronte (hash), cifratura, codici casuali sicuri, codifiche e controlli dei dati.
Funzioni 15
codifica_base64codifica_esadecimaleconfronto_sicurodecodifica_base64decodifica_esadecimalefirma_hmacimprontaimpronta_fileimpronta_passwordnumero_casuale_sicuronuovo_uuidpassword_casualetesto_casuale_sicuroverifica_hmacverifica_password
impronta(dati, algoritmo = "sha256")#
L'impronta (hash) di un testo o di una lista di byte, in esadecimale.
La stessa entrata dà sempre la stessa impronta; basta cambiare una lettera perché cambi tutta. Algoritmi: "sha256" (consigliato), "sha512", "sha1", "md5" (questi due NON sono sicuri: solo per confronti).
stampa(impronta("ciao", "md5"))6e6bc4e49dd477ebc98ef4046c067b5f
impronta_file(percorso, algoritmo = "sha256")#
L'impronta di un file, per controllare che non sia cambiato.
Legge il file a pezzi: funziona anche con file molto grandi.
stampa(impronta_file("installatore.zip"))ece16c266c15ab27a1b7c9025da9db1a50c139b7b2df4b3142a567dbfc76eea8
codifica_base64(dati, per_url = falso)#
Il testo o la lista di byte in Base64 (solo lettere, cifre, + / =).
Con per_url = vero usa - e _ al posto di + e /, così si può mettere in un indirizzo web.
stampa(codifica_base64("ciao"))Y2lhbw==
decodifica_base64(testo, come_byte = falso)#
Il contrario di codifica_base64.
Accetta anche la variante per URL e il testo senza gli = finali.
stampa(decodifica_base64("Y2lhbw=="))ciao
come_byte = verocodifica_esadecimale(dati, separatore = "")#
Il testo o la lista di byte scritti in esadecimale (due cifre per byte).
stampa(codifica_esadecimale("Leo"))stampa(codifica_esadecimale([255, 1], " "))4c656f ff 01
decodifica_esadecimale(testo, come_byte = falso)#
Il contrario di codifica_esadecimale (spazi e : ignorati).
stampa(decodifica_esadecimale("4c656f"))decodifica_esadecimale("ff 01", come_byte = vero)Leo
nuovo_uuid()#
Un identificativo unico universale (UUID versione 4), casuale.
stampa(nuovo_uuid())43c7423d-c1b9-4fc8-bc3f-8bca3a0e22d1
password_casuale(lunghezza = 16, simboli = vero, cifre = vero, maiuscole = vero, senza_ambigui = falso)#
Una password robusta.
Usa il generatore crittografico del sistema e contiene almeno un carattere di ogni gruppo scelto. Con senza_ambigui = vero evita i caratteri che si confondono (I, l, 1, O, 0, o).
stampa(password_casuale())password_casuale(24, simboli = falso)#WE*qxR9XXPykVKm
numero_casuale_sicuro(da, a)#
Un intero a caso tra da e a (compresi), imprevedibile.
A differenza di casuale non si può ripetere né indovinare: va bene per codici di verifica, estrazioni e giochi con premi.
stampa(numero_casuale_sicuro(100000, 999999))828829
testo_casuale_sicuro(lunghezza = 32, solo_cifre = falso)#
Un testo casuale imprevedibile (lettere, cifre, -, _).
Serve per chiavi, codici di invito, gettoni di accesso.
stampa(testo_casuale_sicuro(20))testo_casuale_sicuro(6, solo_cifre = vero)Z52NhqN1BL9XZoOsQA70
firma_hmac(messaggio, chiave, algoritmo = "sha256")#
La firma HMAC del messaggio con una chiave segreta, in esadecimale.
Chi conosce la chiave può controllare che il messaggio non sia stato cambiato.
variabile f = firma_hmac("importo=100", "chiave segreta")verifica_hmac(messaggio, chiave, firma, algoritmo = "sha256")#
vero se la firma HMAC corrisponde al messaggio.
Il confronto è a tempo costante.
se verifica_hmac(messaggio, chiave, f) allora stampa("Integro") fineconfronto_sicuro(a, b)#
vero se i due testi (o liste di byte) sono uguali, in un tempo che non svela dove differiscono.
Da usare per confrontare codici segreti, gettoni e firme.
confronto_sicuro(codice, "048213")impronta_password(password)#
L'impronta da salvare al posto della password (scrypt con sale casuale).
Due chiamate con la stessa password danno impronte diverse (per il sale), ma verifica_password le riconosce entrambe. Non si può risalire alla password.
variabile salvata = impronta_password("Cavallo-Batteria-42")verifica_password(password, impronta_salvata)#
vero se la password corrisponde all'impronta di impronta_password.
se verifica_password(chiedi("Password: "), salvata) allora stampa("Benvenuto") fine