From 8281dacdfcd2ff0b0f92e52b99448a71a1fcfef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20G=C3=B3mez?= Date: Sat, 29 Sep 2018 22:02:08 -0500 Subject: [PATCH] Create vigenereCipher.js I translate this code from Java repository to Javascript language. Could be improved. --- Ciphers/vigenereCipher.js | 81 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Ciphers/vigenereCipher.js diff --git a/Ciphers/vigenereCipher.js b/Ciphers/vigenereCipher.js new file mode 100644 index 000000000..b71a2252d --- /dev/null +++ b/Ciphers/vigenereCipher.js @@ -0,0 +1,81 @@ +/** + * Check if the Character is letter or not + * @param {String} character - character to check + * @return {object} An array with the character or null if isn't a letter + */ +function isLetter(str) { + return str.length === 1 && str.match(/[a-zA-Z]/i); +} + +/** + * Check if is Uppercase or Lowercase + * @param {String} character - character to check + * @return {Boolean} result of the checking + */ +function isUpperCase(character){ + if (character == character.toUpperCase()) { + return true; + } + if (character == character.toLowerCase()){ + return false; + } +} + +/** + * Encrypt a Vigenere cipher + * @param {String} message - string to be encrypted + * @param {String} key - key for encrypt + * @return {String} result - encrypted string + */ +function encrypt(message, key) +{ + + let result = ""; + + for (let i = 0, j = 0; i < message.length; i++) { + let c = message.charAt(i); + if (isLetter(c)){ + if(isUpperCase(c)) { + result += String.fromCharCode((c.charCodeAt(0) + key.toUpperCase().charCodeAt(j) - 2 * 65) % 26 + 65); // A: 65 + } else { + result += String.fromCharCode((c.charCodeAt(0) + key.toLowerCase().charCodeAt(j) - 2 * 97) % 26 + 97); // a: 97 + } + } else { + result+=c; + } + j = ++j % key.length; + } + return result; +} + +/** + * Decrypt a Vigenere cipher + * @param {String} message - string to be decrypted + * @param {String} key - key for decrypt + * @return {String} result - decrypted string + */ +function decrypt(message, key) +{ + let result =""; + + for(let i = 0, j = 0; i < message.length; i++){ + let c = message.charAt(i); + if (isLetter(c)){ + if(isUpperCase(c)) { + result += String.fromCharCode(90-(25-(c.charCodeAt(0)-key.toUpperCase().charCodeAt(j)))%26); + } else { + result += String.fromCharCode(122-(25-(c.charCodeAt(0)-key.toLowerCase().charCodeAt(j)))%26); + } + } else { + result+=c; + } + j = ++j % key.length; + } + return result; +} + +let messageEncrypt = encrypt('Hello World!', 'code'); +console.log(messageEncrypt); // "Jhpnr Yrvng!" + +let messageDecrypt = decrypt('Jsopq Zstzg!', 'code'); +console.log(messageDecrypt); // "Hello World!"