L'oggetto crypto
in JavaScript fornisce funzionalità crittografiche che possono essere utilizzate per generare numeri casuali sicuri, creare hash, cifrare e decifrare dati. È disponibile nelle moderne API Web e nei contesti Node.js.
Generazione di numeri casuali sicuri
Per generare numeri casuali crittograficamente sicuri, possiamo usare il metodo crypto.getRandomValues()
:
const array = new Uint8Array(10);
crypto.getRandomValues(array);
console.log(array);
Questo metodo riempie un array tipizzato con numeri casuali sicuri.
Creazione di un hash
Possiamo utilizzare l'API crypto.subtle.digest
per creare un hash, ad esempio SHA-256:
async function generateHash(message) {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
return hashHex;
}
generateHash("Hello, world!").then(console.log);
Questo codice converte una stringa in un hash SHA-256.
Crittografia e decrittografia
Con l'API crypto.subtle
, possiamo cifrare e decifrare dati usando AES-GCM:
async function encryptData(key, data) {
const encoder = new TextEncoder();
const encodedData = encoder.encode(data);
const iv = crypto.getRandomValues(new Uint8Array(12));
const encrypted = await crypto.subtle.encrypt(
{ name: "AES-GCM", iv: iv },
key,
encodedData
);
return { encrypted, iv };
}
async function decryptData(key, encrypted, iv) {
const decrypted = await crypto.subtle.decrypt(
{ name: "AES-GCM", iv: iv },
key,
encrypted
);
return new TextDecoder().decode(decrypted);
}
Questa implementazione utilizza AES-GCM, un algoritmo sicuro e moderno per la crittografia simmetrica.
Conclusione
L'oggetto crypto
in JavaScript fornisce potenti strumenti per la sicurezza delle applicazioni, consentendo la generazione di numeri casuali sicuri, la creazione di hash e l'implementazione di tecniche di crittografia moderne.