<!DOCTYPE html> <html> <head> <title>passORD</title> <style> body { background-color: black; color: white; font-family: sans-serif; } button { background-color: orange; border: none; color: white; padding: 5px; width: 100px; } </style> </head> <body> <center> <form> passORD: <input type="password" id="password" required><br><br> <button type="button" id="decryptBtn">Show content</button><br><br> <span id="errormessage"></span><br> <label for="result">Cleartext:</label><br> <textarea id="result" rows="6" cols="60" readonly></textarea> </form> <script> document.getElementById('decryptBtn').addEventListener('click', async () => { const base64Ciphertext = "PyEuN0/e0DWw3t4woG89Txffr97adFcmSnlchgaB0pySiKNNKkY3zhA16RtPPLPe9DjNoOkOmIYMJ9z91r35rIb0Y7pn5OnH8rCHD5AJqupIemnTK47sFjN547RLcBy/aR+o/4wnE4iaBiz1hnnshvzYagVvTEpMliVDm7DM36x1d1om77jKjR3pzdd66lUw1FZ07cCjScqryauEhF0TG65jXoVDZy9avWipZU77mJtZa6wRsY50ZiTsQeSb/2Eh"; const password = document.getElementById('password').value; try { const passwordBuffer = new TextEncoder().encode(password); const passwordKey = await window.crypto.subtle.importKey('raw', passwordBuffer, 'PBKDF2', false, ['deriveBits']); const saltedCiphertext = base64ToArrayBuffer(base64Ciphertext); const salt = saltedCiphertext.slice(0, 16); const iv = saltedCiphertext.slice(16, 28); const ciphertext = saltedCiphertext.slice(28); const aesKey = await window.crypto.subtle.deriveBits( { name: 'PBKDF2', salt, iterations: 600000, hash: 'SHA-256' }, passwordKey, 256 ); const key = await window.crypto.subtle.importKey('raw', aesKey, 'AES-GCM', false, ['decrypt']); const decryptedData = await window.crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, ciphertext); const resultTextarea = document.getElementById('result'); resultTextarea.value = new TextDecoder().decode(decryptedData); } catch (error) { errormessage.textContent = "Error in decryption, please check the password" errormessage.style.color = "red" console.error(error); } }); function base64ToArrayBuffer(base64) { const binaryString = window.atob(base64); const bytes = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes.buffer; } </script> </center> </body> </html>
Inscription number 20,765,815
Genesis block 801,086
File type text
File size 2.51 KB
Creation date Aug 5,2023 3:59 pm