Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const
  2. OFFSET = "A".charCodeAt(0),
  3. MOD = "Z".charCodeAt(0) - OFFSET + 1,
  4. AFFINE_A_VALUES = [1,3,5,7,9,11,15,17,19,21,23,25],
  5. AFFINE_B_VALUES = [...Array(26).keys()],
  6. CIPHERED_ALPHA = "WLNCTUZRXHGASDFOQJEBKPVIYM",
  7. VIGENERECIPHER_KEY = "VIGENERECIPHER";
  8.  
  9. const ceasarCipher = (text, shift) => {
  10.   return text.split("")
  11.              .map(letter =>
  12.                String.fromCharCode(
  13.                  ((letter.charCodeAt(0) + (OFFSET + shift)) % MOD) + OFFSET))
  14.              .join("");
  15. };
  16.  
  17. const ceasarDecipher = (text, shift) => {
  18.   return ceasarCipher(text, -shift);
  19. };
  20.  
  21. const ceasarAnalysis = text => {
  22.   for (let i = 0; i < MOD - 1; i++) {
  23.     console.log(ceasarDecipher(text, i));
  24.   }
  25. }
  26.  
  27. const affineCipher = (text, a, b) => {
  28.   return text.split("")
  29.              .map(letter =>
  30.              String.fromCharCode((((a * (letter.charCodeAt(0) - OFFSET) + b) % MOD) + OFFSET)))
  31.              .join("");
  32. }
  33.  
  34. const affineDecipher = (text, a, b) => {
  35.   let aInv = 0, flag = 0;
  36.   for (let i = 0; i < MOD; i++) {
  37.     flag = (a * i) % MOD;
  38.     if (flag === 1) {
  39.       aInv = i;
  40.     }
  41.   }
  42.   return text.split("")
  43.              .map(letter =>
  44.              String.fromCharCode((((aInv * (letter.charCodeAt(0) + OFFSET - b)) % MOD) + OFFSET)))
  45.              .join("");
  46. }
  47.  
  48. const affineAnalysis = text => {
  49.   let i = 0;
  50.   AFFINE_A_VALUES.forEach(a => {
  51.     AFFINE_B_VALUES.forEach(b => {
  52.       console.log(affineDecipher(text, a, b));
  53.       i++;
  54.     });
  55.   });
  56.   console.log(i); // => 312 total
  57. }
  58.  
  59. const substitutionCipher = (key, text) => {
  60.   let result = "";
  61.   let keySpace = key.split("").map(c => c);
  62.   return text.split("")
  63.              .map(letter =>
  64.                {
  65.                  let index = letter.charCodeAt(0) - OFFSET;
  66.                  if (index > keySpace.length || index < 0) {
  67.                    return letter;
  68.                  } else {
  69.                    return keySpace[index];
  70.                  }
  71.                })
  72.              .join("");
  73. };
  74.  
  75. const substitutionDecipher = (key, text) => {
  76.   return text.split("")
  77.              .map(letter =>
  78.                {
  79.                  let index = key.indexOf(letter);
  80.                  let ascii = index + 65;
  81.                  if (ascii < 65 || ascii > 90) {
  82.                    return letter;
  83.                  } else {
  84.                    return String.fromCharCode(ascii);
  85.                  }
  86.                })
  87.              .join("");
  88. };
  89.  
  90. const vigenereCipher = (key, text) => {
  91.   let j = 0;
  92.   return text.split("")
  93.              .map(letter =>
  94.                {
  95.                  let ascii = letter.charCodeAt(0);
  96.                  if (ascii < 65 || ascii > 90) {
  97.                    return letter;
  98.                  } else {
  99.                    let val = (ascii + key.charCodeAt(j) - 2 * OFFSET) % MOD + OFFSET;
  100.                    j = ++j % key.length;
  101.                    return String.fromCharCode(val);
  102.                  }
  103.                })
  104.              .join("");
  105. }
  106.  
  107. const vigenereDecipher = (key, text) => {
  108.   let j = 0;
  109.   return text.split("")
  110.              .map(letter =>
  111.                {
  112.                  let ascii = letter.charCodeAt(0);
  113.                  if (ascii < 65 || ascii > 90) {
  114.                    return letter;
  115.                  } else {
  116.                    let val = (ascii - key.charCodeAt(j) + MOD) % MOD + OFFSET;
  117.                    j = ++j % key.length;
  118.                    return String.fromCharCode(val);
  119.                  }
  120.                })
  121.              .join("");
  122. }
  123.  
  124. console.log(ceasarCipher("KRYPTOGRAFIE", 3)); // => NUBSWRJUDILH
  125. console.log(ceasarDecipher("NUBSWRJUDILH", 3)); // => KRYPTOGRAFIE
  126. // ceasarAnalysis("NUBSWRJUDILH");
  127.  
  128. console.log(affineCipher("THEINITIAL", 5, 9)); // => ASDXWXAXJM
  129. console.log(affineDecipher("ASDXWXAXJM", 5, 9)); // => THEINITIAL
  130. // affineAnalysis("ASDXWXAXJM");
  131.  
  132. console.log(substitutionCipher(CIPHERED_ALPHA, "MESSAGE")); // => STEEWZT
  133. console.log(substitutionDecipher(CIPHERED_ALPHA, "STEEWZT")); // => MESSAGE
  134.  
  135. console.log(vigenereCipher(VIGENERECIPHER_KEY, "KRYPTOGRAFIE")); // => FZETGSXVCNXL
  136. console.log(vigenereDecipher(VIGENERECIPHER_KEY, "FZETGSXVCNXL")); // => KRYPTOGRAFIE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement