Vai al contenuto
Leo

Libreria

Sicurezza

Impronte (hash), cifratura, codici casuali sicuri, codifiche e controlli dei dati.

  • 15 voci
  • 12 voci con esempi eseguiti

Funzioni 15

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).

Esempioeseguito con Leo
stampa(impronta("ciao", "md5"))
Uscita
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.

Esempioeseguito con Leo
stampa(impronta_file("installatore.zip"))
Uscita
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.

Esempioeseguito con Leo
stampa(codifica_base64("ciao"))
Uscita
Y2lhbw==

decodifica_base64(testo, come_byte = falso)#

Il contrario di codifica_base64.

Accetta anche la variante per URL e il testo senza gli = finali.

Esempioeseguito con Leo
stampa(decodifica_base64("Y2lhbw=="))
Uscita
ciao
Altri esempicontrollato con Leo
come_byte = vero

codifica_esadecimale(dati, separatore = "")#

Il testo o la lista di byte scritti in esadecimale (due cifre per byte).

Esempioeseguito con Leo
stampa(codifica_esadecimale("Leo"))stampa(codifica_esadecimale([255, 1], " "))
Uscita
4c656f
ff 01

decodifica_esadecimale(testo, come_byte = falso)#

Il contrario di codifica_esadecimale (spazi e : ignorati).

Esempioeseguito con Leo
stampa(decodifica_esadecimale("4c656f"))decodifica_esadecimale("ff 01", come_byte = vero)
Uscita
Leo

nuovo_uuid()#

Un identificativo unico universale (UUID versione 4), casuale.

Esempioeseguito con Leo
stampa(nuovo_uuid())
Uscita
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).

Esempioeseguito con Leo
stampa(password_casuale())password_casuale(24, simboli = falso)
Uscita
#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.

Esempioeseguito con Leo
stampa(numero_casuale_sicuro(100000, 999999))
Uscita
828829

testo_casuale_sicuro(lunghezza = 32, solo_cifre = falso)#

Un testo casuale imprevedibile (lettere, cifre, -, _).

Serve per chiavi, codici di invito, gettoni di accesso.

Esempioeseguito con Leo
stampa(testo_casuale_sicuro(20))testo_casuale_sicuro(6, solo_cifre = vero)
Uscita
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.

Esempioeseguito con Leo
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.

Esempiocontrollato con Leo
se verifica_hmac(messaggio, chiave, f) allora stampa("Integro") fine

confronto_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.

Esempiocontrollato con Leo
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.

Esempioeseguito con Leo
variabile salvata = impronta_password("Cavallo-Batteria-42")

verifica_password(password, impronta_salvata)#

vero se la password corrisponde all'impronta di impronta_password.

Esempiocontrollato con Leo
se verifica_password(chiedi("Password: "), salvata) allora stampa("Benvenuto") fine