Last active
November 23, 2018 12:40
-
-
Save 42tg/cb703e1b0c3c44ef8a86d0831479e8a1 to your computer and use it in GitHub Desktop.
Herz Decrypt cipher
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
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; |
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
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