Add tests for encrypting and decrypting.
This commit is contained in:
parent
8dc15d27f5
commit
a8bc9e7555
|
@ -0,0 +1,40 @@
|
||||||
|
<!doctype html>
|
||||||
|
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<title>One-Time Pad Generator</title>
|
||||||
|
<meta name="description" content="One-Time Pad Generator">
|
||||||
|
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<strong>Your Message</strong><br>
|
||||||
|
<textarea id="input"></textarea><br>
|
||||||
|
<button id="encryptInput">Encrypt</button><br>
|
||||||
|
<br>
|
||||||
|
<strong>One-Time Pad</strong><br>
|
||||||
|
<pre id="pad"></pre><br>
|
||||||
|
<strong>Encrypted Message</strong><br>
|
||||||
|
<pre id="encrypted"></pre><br>
|
||||||
|
<br>
|
||||||
|
<hr>
|
||||||
|
<br>
|
||||||
|
<strong>Their Message</strong><br>
|
||||||
|
<textarea id="encryptedInput"></textarea><br>
|
||||||
|
<strong>One-Time Pad</strong><br>
|
||||||
|
<textarea id="encryptedInputPad"></textarea><br>
|
||||||
|
<button id="decryptInput">Decrypt</button><br>
|
||||||
|
<br>
|
||||||
|
<strong>Decrypted Message</strong><br>
|
||||||
|
<pre id="decrypted"></pre><br>
|
||||||
|
|
||||||
|
<script src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
19
index.js
19
index.js
|
@ -8,13 +8,14 @@ function generatePad(string) {
|
||||||
const pad = [];
|
const pad = [];
|
||||||
for (let i = 0; i < string.length; i++) {
|
for (let i = 0; i < string.length; i++) {
|
||||||
const letter = Math.floor(Math.random() * CHARS.length);
|
const letter = Math.floor(Math.random() * CHARS.length);
|
||||||
pad.push(letter);
|
pad.push(CHARS[letter]);
|
||||||
}
|
}
|
||||||
return pad;
|
return pad;
|
||||||
}
|
}
|
||||||
|
|
||||||
function encrypt(string) {
|
function encrypt(string) {
|
||||||
const strippedString = string.replace(/[^A-Z0-9]/g, '');
|
const strippedString = string.replace(/[^a-zA-Z0-9]/g, '');
|
||||||
|
console.log('strippedString', strippedString);
|
||||||
const pad = generatePad(strippedString);
|
const pad = generatePad(strippedString);
|
||||||
return {
|
return {
|
||||||
oneTimePad: pad,
|
oneTimePad: pad,
|
||||||
|
@ -33,3 +34,17 @@ function decrypt(string, pad) {
|
||||||
return CHARS[(letterValue - padValue) % CHARS.length];
|
return CHARS[(letterValue - padValue) % CHARS.length];
|
||||||
}).join('');
|
}).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
document.getElementById('encryptInput').onclick = () => {
|
||||||
|
const input = document.getElementById('input').value;
|
||||||
|
const encryption = encrypt(input);
|
||||||
|
document.getElementById('pad').innerHTML = encryption.oneTimePad.join('');
|
||||||
|
document.getElementById('encrypted').innerHTML = encryption.encryptedMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('decryptInput').onclick = () => {
|
||||||
|
const input = document.getElementById('encryptedInput').value;
|
||||||
|
const pad = document.getElementById('encryptedInputPad').value.split('');
|
||||||
|
const output = decrypt(input, pad);
|
||||||
|
document.getElementById('decrypted').innerHTML = output;
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
"description": "Make secure communication easy and fun!",
|
"description": "Make secure communication easy and fun!",
|
||||||
"author": "Robbie Antenesse <dev@alamantus.com>",
|
"author": "Robbie Antenesse <dev@alamantus.com>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "parcel ./index.html",
|
||||||
|
"build": "parcel build ./index.html"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-preset-env": "^1.6.1",
|
"babel-preset-env": "^1.6.1",
|
||||||
"parcel-bundler": "^1.6.2"
|
"parcel-bundler": "^1.6.2"
|
||||||
|
|
Loading…
Reference in New Issue