Created
February 19, 2021 14:09
-
-
Save Alexandre-cibot/46ddfb256fa3cd0742f087abdd9d3553 to your computer and use it in GitHub Desktop.
Vigenère cipher - Clash of Code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Vigenère cipher | |
// https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher | |
// Created for a Clash Of Code | |
// doesnt respect case. screw it. | |
function encrypt(text, code) { | |
text = text.toLowerCase(); | |
code = code.toLowerCase(); | |
const alpha = [..."abcdefghijklmnopqrstuvwxyz".repeat(2)]; | |
let output = ""; | |
let key = code; | |
while (key.length < text.length) { | |
key += code; | |
} | |
if (key.length !== text.length) { | |
key = key.slice(0, text.length); | |
} | |
for (let i = 0; i < text.length; i++) { | |
const letter = text[i]; | |
if (!alpha.includes(letter)) { | |
output += letter; | |
} else { | |
const letterAlphaIndex = alpha.indexOf(letter); | |
const k = key[i]; | |
const kAlphaIndex = alpha.indexOf(k); | |
output += alpha[letterAlphaIndex + kAlphaIndex]; | |
} | |
} | |
return output; | |
} | |
function decrypt(text, code) { | |
text = text.toLowerCase(); | |
code = code.toLowerCase(); | |
const alpha = [..."abcdefghijklmnopqrstuvwxyz".repeat(2)]; | |
let output = ""; | |
let key = code; | |
while (key.length < text.length) { | |
key += code; | |
} | |
if (key.length !== text.length) { | |
key = key.slice(0, text.length); | |
} | |
for (let i = 0; i < text.length; i++) { | |
const letter = text[i]; | |
if (!alpha.includes(letter)) { | |
output += letter; | |
} else { | |
const letterAlphaIndex = alpha.indexOf(letter); | |
const k = key[i]; | |
const kAlphaIndex = alpha.indexOf(k); | |
let indexToget = letterAlphaIndex - kAlphaIndex; | |
if (indexToget < 0) { | |
output += alpha[26 - Math.abs(indexToget)]; | |
} else { | |
output += alpha[indexToget]; | |
} | |
} | |
} | |
return output; | |
} | |
const encryptedMessage = encrypt("Je suis un message secret.", "lecode"); | |
console.log(encryptedMessage); | |
console.log(decrypt(encryptedMessage, "lecode")); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment