| 1 | // Cipher decoder tool
|
| 2 |
|
| 3 | const DecoderPage = {
|
| 4 | render() {
|
| 5 | return `
|
| 6 | <section class="hero">
|
| 7 | <h1>CIPHER DECODER</h1>
|
| 8 | <p class="lead">Tools for decryption and analysis.</p>
|
| 9 | </section>
|
| 10 |
|
| 11 | <section class="panel">
|
| 12 | <p class="panel-title">CAESAR CIPHER</p>
|
| 13 | <div class="decoder-tool">
|
| 14 | <input type="text" id="caesar-input" placeholder="Enter encrypted text" />
|
| 15 | <label>Shift: <input type="number" id="caesar-shift" min="0" max="25" value="3" /></label>
|
| 16 | <button onclick="DecoderPage.decodeCaesar()">Decode</button>
|
| 17 | <div id="caesar-output" class="decoder-output"></div>
|
| 18 | </div>
|
| 19 | </section>
|
| 20 |
|
| 21 | <section class="panel">
|
| 22 | <p class="panel-title">VIGENÈRE CIPHER</p>
|
| 23 | <div class="decoder-tool">
|
| 24 | <input type="text" id="vigenere-input" placeholder="Enter encrypted text" />
|
| 25 | <label>Key: <input type="text" id="vigenere-key" placeholder="Enter cipher key" /></label>
|
| 26 | <button onclick="DecoderPage.decodeVigenere()">Decode</button>
|
| 27 | <div id="vigenere-output" class="decoder-output"></div>
|
| 28 | </div>
|
| 29 | </section>
|
| 30 |
|
| 31 | <section class="panel">
|
| 32 | <p class="panel-title">BASE64 DECODER</p>
|
| 33 | <div class="decoder-tool">
|
| 34 | <input type="text" id="base64-input" placeholder="Enter base64 text" />
|
| 35 | <button onclick="DecoderPage.decodeBase64()">Decode</button>
|
| 36 | <div id="base64-output" class="decoder-output"></div>
|
| 37 | </div>
|
| 38 | </section>
|
| 39 |
|
| 40 | <section class="panel">
|
| 41 | <p class="panel-title">HEX TO ASCII</p>
|
| 42 | <div class="decoder-tool">
|
| 43 | <input type="text" id="hex-input" placeholder="Enter hex (space-separated)" />
|
| 44 | <button onclick="DecoderPage.decodeHex()">Decode</button>
|
| 45 | <div id="hex-output" class="decoder-output"></div>
|
| 46 | </div>
|
| 47 | </section>
|
| 48 | `;
|
| 49 | },
|
| 50 |
|
| 51 | decodeCaesar() {
|
| 52 | const text = document.getElementById('caesar-input').value;
|
| 53 | const shift = parseInt(document.getElementById('caesar-shift').value);
|
| 54 | const result = Ciphers.caesar(text, shift);
|
| 55 | document.getElementById('caesar-output').textContent = result;
|
| 56 | },
|
| 57 |
|
| 58 | decodeVigenere() {
|
| 59 | const text = document.getElementById('vigenere-input').value;
|
| 60 | const key = document.getElementById('vigenere-key').value;
|
| 61 | if (!key) {
|
| 62 | document.getElementById('vigenere-output').textContent = 'Enter a key to decode.';
|
| 63 | return;
|
| 64 | }
|
| 65 | const result = Ciphers.vigenere(text, key, true);
|
| 66 | document.getElementById('vigenere-output').textContent = result;
|
| 67 | },
|
| 68 |
|
| 69 | decodeBase64() {
|
| 70 | const text = document.getElementById('base64-input').value;
|
| 71 | const result = Ciphers.base64Decode(text);
|
| 72 | document.getElementById('base64-output').textContent = result;
|
| 73 | },
|
| 74 |
|
| 75 | decodeHex() {
|
| 76 | const hex = document.getElementById('hex-input').value;
|
| 77 | try {
|
| 78 | const result = hex.split(' ').map(h => String.fromCharCode(parseInt(h, 16))).join('');
|
| 79 | document.getElementById('hex-output').textContent = result;
|
| 80 | } catch (e) {
|
| 81 | document.getElementById('hex-output').textContent = 'Invalid hex input.';
|
| 82 | }
|
| 83 | }
|
| 84 | };
|