Skip to content

Instantly share code, notes, and snippets.

@42tg
Last active November 23, 2018 12:40
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save 42tg/cb703e1b0c3c44ef8a86d0831479e8a1 to your computer and use it in GitHub Desktop.
Herz Decrypt cipher
const text = `-------------------------------------------------------------------------------
zbqfrxvi poro ji kbar sgxf - iacivjvavjbq_zjypori_xro_ibghxcgo_ctyxtoxszj
-------------------------------------------------------------------------------
ivxvogk, ygady cazl daggjfxq zxdo srbd vpo ivxjrpoxn, coxrjqf x cbtg bs
gxvpor bq tpjzp x djrrbr xqn x rxebr gxk zrbiion. x koggbt nroiijqffbtq,
aqfjrngon, txi iaivxjqon foqvgk copjqn pjd bq vpo djgn dbrqjqf xjr. po
pogn vpo cbtg xgbsv xqn jqvbqon:
-jqvrbjcb xn xgvxro noj.
pxgvon, po yooron nbtq vpo nxrl tjqnjqf ivxjri xqn zxggon bav zbxriogk:
-zbdo ay, ljqzp! zbdo ay, kba soxrsag uoiajv!
ibgodqgk po zxdo sbrtxrn xqn dbaqvon vpo rbaqn faqroiv. po sxzon xcbav
xqn cgoiion frxhogk vprjzo vpo vbtor, vpo iarrbaqnjqf gxqn xqn vpo
xtxljqf dbaqvxjqi. vpoq, zxvzpjqf ijfpv bs ivoypoq nonxgai, po coqv
vbtxrni pjd xqn dxno rxyjn zrbiioi jq vpo xjr, farfgjqf jq pji vprbxv
xqn ipxljqf pji poxn. ivoypoq nonxgai, njiygoxion xqn igooyk, goxqon
pji xrdi bq vpo vby bs vpo ivxjrzxio xqn gbblon zbgngk xv vpo ipxljqf
farfgjqf sxzo vpxv cgoiion pjd, omajqo jq jvi goqfvp, xqn xv vpo gjfpv
aqvbqiaron pxjr, frxjqon xqn paon gjlo yxgo bxl.
cazl daggjfxq yooyon xq jqivxqv aqnor vpo djrrbr xqn vpoq zbhoron vpo
cbtg idxrvgk.
-cxzl vb cxrrxzli! po ixjn ivorqgk.
po xnnon jq x yroxzpori vbqo:
-sbr vpji, b noxrgk cogbhon, ji vpo foqajqo zprjivjqo: cbnk xqn ibag
xqn cgbbn xqn baqi. igbt daijz, ygoxio. ipav kbar okoi, foqvi. bqo
dbdoqv. x gjvvgo vrbacgo xcbav vpbio tpjvo zbryaizgoi. ijgoqzo, xgg.
po yooron ijnotxki ay xqn fxho x gbqf igbt tpjivgo bs zxgg, vpoq yxaion
xtpjgo jq rxyv xvvoqvjbq, pji ohoq tpjvo voovp fgjivoqjqf poro xqn vporo
tjvp fbgn ybjqvi. zprkibivbdbi. vtb ivrbqf iprjgg tpjivgoi xqitoron
vprbafp vpo zxgd.
-vpxqli, bgn zpxy, po zrjon crjilgk. vpxv tjgg nb qjzogk. itjvzp bss
vpo zarroqv, tjgg kba?
po iljyyon bss vpo faqroiv xqn gbblon frxhogk xv pji txvzpor, fxvporjqf
xcbav pji gofi vpo gbbio sbgni bs pji fbtq. vpo ygady ipxnbton sxzo xqn
iaggoq bhxg ubtg rozxggon x yrogxvo, yxvrbq bs xrvi jq vpo djnngo xfoi.
x ygoxixqv idjgo crblo majovgk bhor pji gjyi.`;
module.exports = text;
import text from "./decryptext";
import chalk from "chalk";
const isAscii = x => {
if (x.match(/[a-zA-Z0-9]/)) return true;
return false;
};
//calculate Average character frequency
const frequency = {};
const strippedText = text.split("").filter(isAscii);
strippedText.map(x => {
if (!frequency[x]) frequency[x] = 0;
frequency[x]++;
});
const frequencyOrdered = {};
Object.keys(frequency)
.sort((a, b) => frequency[b] - frequency[a])
.forEach(key => {
frequencyOrdered[key] = `${(
(frequency[key] * 100) /
strippedText.length
).toFixed(2)} (${frequency[key]})`;
});
const LetterMap = {
p: "h",
o: "e",
r: "r",
j: "i",
i: "s",
k: "y",
b: "o",
a: "u",
s: "f",
g: "l",
x: "a",
f: "g",
z: "c",
q: "n",
v: "t",
c: "b",
y: "p",
h: "v",
d: "m",
t: "w",
l: "k",
n: "d",
u: "j",
m: "q",
e: "z"
};
Object.keys(LetterMap).forEach(i => delete frequencyOrdered[i]);
const replaceWithLettermap = x =>
LetterMap[x] ? chalk.greenBright(LetterMap[x]) : chalk.grey(x);
const { inspect, formatWithOptions } = require("util");
const printTable = () => {
console.log(
text
.split("")
.map(replaceWithLettermap)
.join("")
);
console.log(frequencyOrdered);
console.log(LetterMap);
};
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: "S0LV3R> "
});
printTable();
rl.prompt();
rl.on("line", line => {
const answer = line.trim();
if (!answer.match(/[a-zA-Z]=[a-zA-Z]/)) {
if (answer.match(/![a-zA-Z]/)) {
delete LetterMap[answer.charAt(1)];
printTable();
return console.log("Removed Char from Map!");
} else {
rl.prompt();
return console.log("Wrong Input!");
}
}
if (LetterMap[answer.charAt(0)]) {
rl.prompt();
return console.log("Char already in use!");
}
LetterMap[answer.charAt(0)] = answer.charAt(2);
delete frequencyOrdered[answer.charAt(0)];
process.stdout.write("\u001b[2J\u001b[0;0H");
printTable();
rl.prompt();
}).on("close", () => {
console.log("Have a great day!");
process.exit(0);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment