Skip to content

Instantly share code, notes, and snippets.

@marioluan
Created May 6, 2014 00:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marioluan/176ebe087e137dbad76d to your computer and use it in GitHub Desktop.
Save marioluan/176ebe087e137dbad76d to your computer and use it in GitHub Desktop.
Collection of functions I wrote while taking the cryptography classes from Khan Academy.
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