La primera imagen es el texto cifrado. Y la segunda imagen es la clave para el descifrado.
La idea es así:
- Iterar a través de los dígitos del texto cifrado.
- Si el dígito en la i ^ ésima posición del texto cifrado <Si el dígito en la i ^ ésima posición de la clave, agregue 10.
- Reste el dígito en la posición i ^ th de la clave del dígito en la posición i ^ th del texto cifrado
- Divide el resultado en fragmentos de dos dígitos.
- Convierta cada fragmento de dos dígitos al alfabeto en esa posición. 1 = A, 2 = B .. 26 = Z, 27 = A …
Ahí tienes ..
- ¿Cuáles son algunos acertijos matemáticos que los maestros no podrán responder?
- ¿Cómo debo ejecutar el segundo bloque en el método roux para resolver un cubo de Rubik? Soy un principiante en este método.
- En total hay 20 botellas. En eso 1 está envenenado. ¿Cuántos ratones mínimos se necesitan para descubrirlo?
- ¿Cuándo estás asombrado / desconcertado por Quora?
- ¿Alguien puede proporcionar trucos cortos o métodos para resolver acertijos de razonamiento rápidamente?
El resultado es,
postularse hoy mismo en mi júnior x personas extraordinarias haciendo trabajo extraordinario
El JavaScript para el mismo fue publicado en, Resolviendo el pequeño rompecabezas de la NSA
Ejecute este javascript en la consola de su navegador para obtener la salida.
// Solución JavasScript para el rompecabezas OTP de la NSA
//https://www.facebook.com/NSACareers/photos/a.10150165394744358.374663.38534064357/10155202632259358/?type=3&theater
var cipherText = “6097703920902805098792458100127006308920278750110017283152904512008635073921961285410397244195102032905201942802717080593227”;
var key = “6981642705701301086201207791115091207421138236919216132358913111926129022415841781360483274671901231854407951401635567442416”;
var mensaje = “”;
// compensa esto para que letters.charAt (1) devuelva A y letters.charAt (26) devuelva Z
letras var = “abcdefghijklmnopqrstuvwxyz”;
// Haciendo el segundo paso aquí: https://en.wikipedia.org/wiki/One-time_pad#Example
// Recorriendo el texto cifrado y la clave un carácter a la vez
// Si el carácter de texto cifrado (c) es menor que el carácter clave (k), agregue 10
for (var i = 0; i <cipherText.length; i ++) {
var c = Número (cipherText.charAt (i));
var k = Número (key.charAt (i));
si (c <k) {
c + = 10;
}
var p = c – k;
mensaje + = p.toString ();
}
// mensaje ahora contiene una cadena de números. Para convertirlos a letras, primero divídalos en
// fragmentos de dos dígitos.
var plainTextArray = message.match (/. {1,2} / g);
var respuesta = “”;
// Ahora recorra cada fragmento, conviértalo en un número y luego agregue el valor de la letra correspondiente
// a la respuesta
plainTextArray.forEach (function (elemento, índice, matriz) {
// Cada número de dos dígitos es una letra. Entonces “01” es a, “26” es z. Para valores> 26
// ir al comienzo del alfabeto
var letterIndex = Number (elemento)% 26;
respuesta + = letras [letterIndex];
})
// muestra la respuesta
console.log (respuesta);