Created
May 6, 2014 00:21
-
-
Save marioplumbarius/176ebe087e137dbad76d to your computer and use it in GitHub Desktop.
Collection of functions I wrote while taking the cryptography classes from Khan Academy.
This file contains hidden or 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
var alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; | |
function encryption ( word, shift ) { | |
var encryptedWord = ''; | |
for (var i = 0; i < word.length; i++) { | |
var letter = word[i].toUpperCase(); | |
var letterIndex = alphabet.indexOf(letter); | |
var shiftedIndex = letterIndex+shift; | |
var newLetterIndex = shiftedIndex % alphabet.length; | |
// if ( shiftedIndex > alphabet.length ) newLetterIndex--; | |
var newLetter = alphabet[newLetterIndex]; | |
encryptedWord += newLetter; | |
} | |
return encryptedWord; | |
} | |
function decryption ( word, shift ) { | |
var decryptedWord = ''; | |
for (var i = 0; i < word.length; i++) { | |
var letter = word[i].toUpperCase(); | |
var letterIndex = alphabet.indexOf(letter); | |
var shiftedIndex = letterIndex-shift; | |
var newLetterIndex = shiftedIndex % alphabet.length; | |
if ( shiftedIndex < 0 ) newLetterIndex = alphabet.length + newLetterIndex; | |
var newLetter = alphabet[newLetterIndex]; | |
decryptedWord += newLetter; | |
} | |
return decryptedWord; | |
} | |
function convertKeywordToIndexes( keyword ){ | |
var indexes = []; | |
for (var i = 0; i < keyword.length; i++) { | |
var letter = keyword[i].toUpperCase(); | |
var letterIndex = alphabet.indexOf(letter); | |
indexes.push(letterIndex); | |
}; | |
return indexes; | |
} | |
function vigenereCipher( keyword, phrase ){ | |
var encryptedPhrase = ''; | |
var indexesKeyword = convertKeywordToIndexes( keyword ); | |
var clonedIndexesKeyword = indexesKeyword.slice(); | |
for (var i = 0; i < phrase.length; i++) { | |
var letter = phrase[i]; | |
if ( letter === ' ' ) { | |
encryptedPhrase += ' '; | |
continue; | |
} | |
var shift = clonedIndexesKeyword.shift(); | |
var newLetter = encryption( letter, shift ); | |
encryptedPhrase += newLetter; | |
if ( clonedIndexesKeyword.length === 0 ) clonedIndexesKeyword = indexesKeyword.slice(); | |
} | |
return encryptedPhrase; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment