-
Notifications
You must be signed in to change notification settings - Fork 0
/
script10.js
50 lines (46 loc) · 1.66 KB
/
script10.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
document.getElementById("encryptButton").addEventListener("click", async () => {
const newPassword = document.getElementById("newPassword").value;
try {
// Derive an encryption key using a predefined salt and iterations
const keyMaterial = await crypto.subtle.importKey(
"raw",
new TextEncoder().encode("predefined_salt"), // Use a predefined salt
{
name: "PBKDF2",
},
false,
["deriveKey"]
);
const encryptionKey = await crypto.subtle.deriveKey(
{
name: "PBKDF2",
salt: new TextEncoder().encode("salt123"), // Use a unique salt for each user.
iterations: 100000,
hash: "SHA-256",
},
keyMaterial,
{
name: "AES-GCM",
length: 256,
},
true,
["encrypt", "decrypt"]
);
// Encode the new password and encrypt it
const encodedNewPassword = new TextEncoder().encode(newPassword);
const encryptedPassword = await crypto.subtle.encrypt(
{
name: "AES-GCM",
iv: crypto.getRandomValues(new Uint8Array(12)),
},
encryptionKey,
encodedNewPassword
);
// Display the encrypted password or handle it as needed
document.getElementById("output").innerText = `Encrypted Password: ${btoa(
String.fromCharCode(...new Uint8Array(encryptedPassword))
)}`;
} catch (error) {
document.getElementById("output").innerText = "Encryption failed.";
}
});