Skip to content

Instantly share code, notes, and snippets.

@rhettl
Last active August 29, 2015 14:24
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 rhettl/a85114b3e91ef5df2e13 to your computer and use it in GitHub Desktop.
Save rhettl/a85114b3e91ef5df2e13 to your computer and use it in GitHub Desktop.
/**
* Created by rhett on 7/9/15.
*/
var encrypt = function (message, pass, shift) {
var alpha = shiftAlpha(shift);
message = message.toUpperCase().split('');
pass = pass.toUpperCase().replace(/\s/g, '').split('').map(function (i) {
return alpha.indexOf(i);
});
var aLen = alpha.length;
var out = '';
for (var i = 0; i < message.length; i++) {
var Ma = message[i],
Kb = pass[i % pass.length],
MaNum = alpha.indexOf(Ma),
Ca = (aLen + MaNum + Kb) % aLen;
out += alpha[Ca];
}
return out;
};
var decrypt = function (code, pass, shift) {
var alpha = shiftAlpha(shift);
code = code.toUpperCase().split('');
pass = pass.toUpperCase().split('').map(function (i) {
return alpha.indexOf(i);
});
var aLen = alpha.length;
var out = '';
for (var i = 0; i < code.length; i++) {
var Ca = code[i],
Kb = pass[i % pass.length],
CaNum = alpha.indexOf(Ca),
Ma = (aLen + CaNum - Kb) % aLen;
out += alpha[Ma];
}
return out;
};
var extrapPass = function (msg, code, shift) {
var alpha = shiftAlpha(shift);
msg = msg.toUpperCase().split('');
code = code.toUpperCase().split('');
var aLen = alpha.length;
var out = '';
for (var i = 0; i < code.length; i++) {
var Ma = msg[i],
Ca = code[i],
MaNum = alpha.indexOf(Ma),
CaNum = alpha.indexOf(Ca),
Ka = (aLen + CaNum - MaNum) % aLen;
out += alpha[Ka];
}
return out;
};
var shiftAlpha = function(shift){
var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (shift) {
return (shift.toUpperCase() + alpha)
.split('')
.reduce(function(last, next){
if (last.indexOf(next) === -1) {
last.push(next);
}
return last;
}, [])
.join('');
} else {
return alpha;
}
};
var msg = 'abcdzz', pass = 'zabbzz', key = 'booth',
code = encrypt(msg, pass, key),
retMsg = decrypt(code, pass, key),
retPass = extrapPass(msg, code, key);
console.log(pass, msg, key, code, retMsg, retPass);
//console.log(extrapPass('comanche', 'EWTGQEPA', 'booth'));
console.log(decrypt('EWTGQEPA NIPZH', 'booth', 'booth'));
//console.log(shiftAlpha(''));
//console.log(shiftAlpha('booth'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment