No final do período, daremos uma olhada na introdução ao trabalho de casa de segurança da informação. Por acaso encontrei o algoritmo Playfair e o algoritmo Hill no algoritmo de criptografia clássica. É interessante implementá -lo na linguagem JavaScript. Verifico o Baidu enquanto codifica e depois dou um bom tutorial sobre o básico do JavaScript.
Playfair
Playfair Senha (Inglês: Playfair Cipher ou Playfair Square) é uma senha de substituição. Escrito com base em uma tabela cifra quadrada de 5*5, com 25 letras dispostas na tabela. Para as 26 letras em inglês, remova o Z mais usado para formar uma tabela de senha.
Ideias de implementação:
1. Prepare uma lista de senha
Uma chave é uma palavra ou frase, e a tabela de senha é resolvida com base na chave dada pelo usuário. Se houver letras duplicadas, você poderá remover as letras duplicadas depois.
Por exemplo, o chave de cão louco principal pode ser compilado em
| C | O | H | M | T |
| R | G | EU | N | U |
| UM | B | J | P | V |
| Y | E | K | Q | C |
| D | F | L | S | X |
A cópia do código é a seguinte:
/*
* Função: Lista de senha compilando
*
* Parâmetros: Chave (Remoção de Espaço e Processamento de Capitalização)
*
* Retornar: Tabela de senha
*/
função createKey (keychars) {
// Array alfabético
var allchars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q' r, '', ',' t ',', ',';
// variável keychars obtém a posição da letra na tabela alfabética e exclua a letra
for (var i = 0; i <keychars.length; i ++) {
var index = alarchars.IndexOF (Keychars [i]);
if (index> -1) {
alarchars.splice (índice, 1);
}
}
// Insira as letras no keychar no alfabeto
for (var i = keychars.length-1; i> = 0; i-) {
alarchars.unshift (keychars [i]);
}
// Insira Keychars da primeira coluna na tabela de senha
for (var i = 0; i <5; i ++) {
for (var j = 0; j <5; j ++) {
key [j] [i] = allChars [i*5+j];
}
}
}
Considerando que os caracteres duplicados e Z precisam ser removidos ao inserir keychars na tabela de senha, o algoritmo de design é o seguinte:
A cópia do código é a seguinte:
/*
* Função: Remova letras duplicadas de strings
*
* Parâmetros: Strings que precisam ser processados
*
* Retorno: String processada
*/
Função removida (str) {
var resultado = [], tempstr = "";
var arr = str.split (''); // divide a string em uma matriz
//arr.sort() ;//sorting
for (var i = 0; i <arn.length; i ++) {
var repentback = true; // A variável de design é garantir que a parte anterior da string não exista nos mesmos caracteres, porque o algoritmo a seguir só pode garantir que os mesmos caracteres sejam conectados juntos
for (var j = 0; j <resultado.length; j ++) {
if (arr [i] == resultado [j])
repetição = false;
}
if (arr [i]! == tempstr && repetição) {
resultado.push (arr [i]);
tempstr = arr [i];
}outro{
continuar;
}
}
return resultado.Join (""); // Converta a matriz em string
}
2. Organize o texto claro
Faça um par de duas letras do texto simples. Se houver duas letras idênticas próximas uma da outra em pares ou a última letra for solteira, insira uma letra X. No estágio inicial da codificação, ele não foi atencioso e se recusou a inserir o número de letras como singulares, o que tornou o usuário pobre.
var k = document.getElementById ("keychars"). value.TOUPPERCASE (). substituir (// s/ig, '');
Remova os espaços e converta em maiúsculas para texto sem formatação.
3. Escreva um texto cifra
Regras de criptografia de texto simples (do Baidu):
1) Se P1 P2 estiver na mesma linha, o texto cifra C1 correspondente é a letra próxima à extremidade direita do P1 P2. A primeira coluna é considerada o lado direito da última coluna. Por exemplo, de acordo com a tabela anterior, a CT corresponde ao OC
2) Se P1 P2 estiver na mesma coluna, o texto cifra C1 C2 correspondente é as letras imediatamente abaixo de P1 P2. A primeira linha é considerada abaixo da última linha.
3) Se P1 e P2 não estiverem na mesma linha e na mesma coluna, C1 e C2 são letras nos outros dois cantos do retângulo determinados por P1 e P2 (como para substituição horizontal ou substituição vertical, você deve marcar uma consulta com antecedência ou experimentar você mesmo). De acordo com a tabela anterior, WH corresponde a Tk ou Kt.
Por exemplo, de acordo com a tabela acima, o texto simples onde há vida, há esperança.
Você pode primeiro organizá -lo em que ele é um pouco
Então o texto cifrado é: kt yg wo ok gy nl hj de cm yg kg lm mb wf
Transforme o texto cifrado em capital e, em seguida, organize -o em grupos de várias cartas.
Por exemplo, em um grupo de 5, Ktygw ookgy nlhjo fcmyg kglmm bwf
4. Decripção
Preencha uma matriz de 5*5 (repita as letras e letras repetidas Z), preencha as posições restantes da matriz em ordem nas posições restantes da matriz e obtenha o texto sem formatação do texto cifrado de acordo com a matriz de reposição. Faça o oposto.
O efeito é como mostrado na figura:
colina
A senha da colina é uma senha de substituição que usa o princípio básico da teoria da matriz. Escrito com base em uma tabela cifra quadrada de 5*5, com 25 letras dispostas na tabela. Para as 26 letras em inglês, remova o Z mais usado para formar uma tabela de senha.
Ideias de implementação:
1. Escreva um alfabeto
var chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' m ',' n ',' o 'p', 'q', 'r,' s, ',' t ',', ',', ';
2. Gerar aleatoriamente chaves
A cópia do código é a seguinte:
/*
* Função: gerar aleatoriamente chaves
*
* Retorno: Matriz de chave
*/
function RandomCreateKey () {
// gerar números aleatoriamente de 0 a 26
for (var i = 0; i <3; i ++) {
for (var j = 0; j <3; j ++) {
chave [i] [j] = math.round (math.random ()*100%26)
}
}
}
3. Código da chave, processe o texto simples com base na chave gerada automaticamente:
A cópia do código é a seguinte:
/*
* Função: algoritmo Hill
*
* Parâmetros: matriz de maiúsculas com múltiplos de comprimento 3
*
* Retorno: String criptografada
*/
Função Hill (P) {
// letras maiúsculas textos cifra
var res = "";
// Desenvolva o número total de vezes que a string precisa ser atravessada
var redond = Math.Round (P.Length/3);
//tratar
for (var b = 0; b <redond; b ++) {
// Texto simples 3
var temp3 = "";
var temparr3 = [];
var sumarr3 = [];
for (var i = 0; i <3; i ++) {
temp3 += p.shift ();
for (var j = 0; j <chars.length; j ++) {
if (temp3 [i] == chars [j])
temparr3 [i] = j;
}
}
//calcular
for (var i = 0; i <3; i ++) {
for (var j = 0; j <3; j ++) {
SUMARR3 [i] = (temparr3 [j]*key [i] [j])%26;
}
}
// Obtenha o índice correspondente de caracteres no alfabeto
for (var i = 0; i <3; i ++) {
res += chars [SUMARR3 [i]];
}
}
retornar res;
};
O efeito é como mostrado na figura:
Os algoritmos acima têm deficiências:
1. Design orientado ao processo, alto grau de acoplamento
2. Muitos loops aninhados, a eficiência do algoritmo precisa ser otimizada
3. Consideração inadequada de possíveis situações, como não processar quando o usuário entra em caracteres não alfabéticos.
Resumir:
Depois de estudar a introdução do curso à segurança da informação por um período de tempo, só posso entender o básico da segurança da informação. A segurança da informação é um assunto muito interessante. Quando você encontrar alguns problemas, pense o máximo possível, faça mais e use mais. Ao mesmo tempo, também devemos fortalecer o acúmulo de fundação matemática, consolidar a fundação JS e ampliar o conhecimento. Esta estrada tem um longo caminho a percorrer.