Al final del período, echaremos un vistazo a la introducción a la tarea de seguridad de la información. Me encontré con el algoritmo de PlayFair y el algoritmo Hill en el algoritmo de criptografía clásica. Es interesante implementarlo en el lenguaje JavaScript. Reviso a Baidu mientras codifico, y luego doy un buen tutorial sobre los conceptos básicos de JavaScript.
playfair
PlayFair Password (inglés: PlayFair Cipher o PlayFair Square) es una contraseña de reemplazo. Escrito basado en una tabla de cifrado de 5*5 cuadrados, con 25 letras dispuestas en la tabla. Para las 26 letras en inglés, elimine la Z más comúnmente utilizada para formar una tabla de contraseña.
Ideas de implementación:
1. Prepare una lista de contraseñas
Una clave es una palabra o frase, y la tabla de contraseña se resuelve en función de la clave dada por el usuario. Si hay letras duplicadas, puede eliminar las letras duplicadas después.
Por ejemplo, la llave loca se puede compilar en
| do | O | H | METRO | T |
| Riñonal | GRAMO | I | norte | U |
| A | B | J | PAG | V |
| Y | mi | K | Q | W |
| D | F | L | S | incógnita |
La copia del código es la siguiente:
/*
* Función: compilar la lista de contraseñas
*
* Parámetros: clave (eliminación de espacio y procesamiento de capitalización)
*
* Regreso: tabla de contraseña
*/
función createKey (keyChars) {
// matriz alfabética
var allchars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'y'];
// KeyChars variables obtiene la posición de la letra en la tabla alfabética y elimina la letra
para (var i = 0; i <keyChars.length; i ++) {
Var index = allchars.indexof (keyChars [i]);
if (index> -1) {
allchars.splice (índice, 1);
}
}
// inserta las letras en el keychar en el alfabeto
for (var i = keychars.length-1; i> = 0; i-) {
allchars.unshift (KeyChars [i]);
}
// Inserte KeyChars desde la primera columna en la tabla de contraseña
para (var i = 0; i <5; i ++) {
para (var j = 0; j <5; j ++) {
clave [j] [i] = allchars [i*5+j];
}
}
}
Teniendo en cuenta que los caracteres duplicados y la Z deben eliminarse al insertar KeyChars en la tabla de contraseñas, el algoritmo de diseño es el siguiente:
La copia del código es la siguiente:
/*
* Función: elimine las letras duplicadas de las cadenas
*
* Parámetros: cadenas que deben procesarse
*
* Regreso: cadena procesada
*/
función eliminauplicate (str) {
Var result = [], temptr = "";
var arr = str.split (''); // divide la cadena en una matriz
//arr.sort() ;//sorting
para (var i = 0; i <arr.length; i ++) {
var repetido = true; // La variable de diseño es asegurarse de que la parte anterior de la cadena no exista en los mismos caracteres, porque el siguiente algoritmo solo puede garantizar que los mismos caracteres estén conectados juntos.
for (var j = 0; j <result.length; j ++) {
if (arr [i] == resultado [j])
replyback = false;
}
if (arr [i]! == temptr && repack) {
resultado.push (arr [i]);
tempttr = arr [i];
}demás{
continuar;
}
}
return result.Join (""); // Convertir la matriz a cadena
}
2. Organice el texto claro
Haga un par de dos letras del texto plano. Si hay dos letras idénticas una al lado de la otra en pares o la última letra es soltera, inserte una letra X. En la etapa temprana de la codificación, no fue considerado y se negó a ingresar el número de letras como singulares, lo que hizo que el usuario fuera pobre.
var k = document.getElementById ("KeyChars"). Value.ToUpperperCase (). Reemplazar (// s/ig, '');
Retire los espacios y convierta a mayúsculas para el texto plano.
3. Escribe un texto de cifrado
Reglas de cifrado de texto sin formato (de Baidu):
1) Si P1 P2 está en la misma línea, el cifrado correspondiente C1 C2 es la letra cercana al extremo derecho de P1 P2. La primera columna se considera el lado derecho de la última columna. Por ejemplo, según la tabla anterior, la TC corresponde a OC
2) Si P1 P2 está en la misma columna, el cifrado correspondiente C1 C2 es las letras inmediatamente debajo de P1 P2. La primera línea se considera a continuación la última línea.
3) Si P1 y P2 no están en la misma fila y en la misma columna, entonces C1 y C2 son letras en las otras dos esquinas del rectángulo determinados por P1 y P2 (como para el reemplazo horizontal o el reemplazo vertical, debe hacer una cita con anticipación, o probarlo usted mismo). Según la tabla anterior, WH corresponde a TK o KT.
Por ejemplo, de acuerdo con la tabla anterior, el texto sin formato donde hay vida, hay esperanza.
Primero puedes organizarlo en lo que ET el es li fe th er ei sh op ex
Entonces el texto cifrado es: kt yg wo ok gy nl hj de cm yg kg lm mb wf
Convierta el texto cifrado en capital y luego colóquelo en grupos de varias letras.
Por ejemplo, en un grupo de 5, ktygw ookgy nlhjo fcmyg kglmm bwf
4. Descifrado
Complete una matriz 5*5 (repita las letras repetidas y las letras z), complete las posiciones restantes de la matriz en orden en las posiciones restantes de la matriz y obtenga el texto plano del texto cifrado de acuerdo con la matriz de reemplazo. Hacer lo contrario.
El efecto es como se muestra en la figura:
colina
La contraseña de Hill es una contraseña de reemplazo que utiliza el principio de teoría de matriz básica. Escrito basado en una tabla de cifrado de 5*5 cuadrados, con 25 letras dispuestas en la tabla. Para las 26 letras en inglés, elimine la Z más comúnmente utilizada para formar una tabla de contraseña.
Ideas de implementación:
1. Escribe un alfabeto
var chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'y', ',', ',', ', »,', ',' y ',' y ',' y ',' y ',' y ',' y ',' y '.
2. Generar claves al azar
La copia del código es la siguiente:
/*
* Función: generar teclas al azar
*
* Return: Key Matrix
*/
función randomcreateKey () {
// Generar números aleatoriamente de 0 a 26
para (var i = 0; i <3; i ++) {
para (var j = 0; j <3; j ++) {
clave [i] [j] = Math.round (Math.random ()*100%26)
}
}
}
3. Código clave, procese el texto sin formato basado en la tecla generada automáticamente:
La copia del código es la siguiente:
/*
* Función: algoritmo de colina
*
* Parámetros: matriz de mayúsculas con múltiplos de longitud 3
*
* Regreso: cadena cifrada
*/
function hill (p) {
// Texto de cifrado de letras mayúsculas
var res = "";
// Desarrollar el número total de veces que la cadena debe atravesar
var redondear = math.round (p.length/3);
//tratar con
para (var b = 0; b <redonde; b ++) {
// texto sin formato 3
var tempp3 = "";
var temparr3 = [];
var sumarr3 = [];
para (var i = 0; i <3; i ++) {
tempp3 += p.shift ();
para (var j = 0; j <chars.length; j ++) {
if (tempp3 [i] == chars [j])
temparr3 [i] = j;
}
}
//calcular
para (var i = 0; i <3; i ++) {
para (var j = 0; j <3; j ++) {
sumarr3 [i] = (temparr3 [j]*clave [i] [j])%26;
}
}
// Obtener el índice correspondiente de caracteres en el alfabeto
para (var i = 0; i <3; i ++) {
res += chars [sumarr3 [i]];
}
}
regresar res;
};
El efecto es como se muestra en la figura:
Los algoritmos anteriores tienen deficiencias:
1. Diseño orientado al proceso, alto grado de acoplamiento
2. Demasiados bucles anidados, la eficiencia del algoritmo debe optimizarse
3. Consideración inadecuada de posibles situaciones, como no procesar cuando el usuario ingresa a caracteres no alfabéticos.
Resumir:
Después de estudiar la introducción del curso a la seguridad de la información por un período de tiempo, solo puedo entender los conceptos básicos de la seguridad de la información. La seguridad de la información es un tema muy interesante. Cuando encuentre algunos problemas, piense tanto como sea posible, haga más y use más. Al mismo tiempo, también debemos fortalecer la acumulación de la fundación matemática, consolidar la Fundación JS y ampliar el conocimiento. Este camino tiene un largo camino por recorrer.