Este artigo apresentará um algoritmo de criptografia/descriptografia simples e fácil de usar: usando a operação OR exclusiva (XOR). O princípio deste algoritmo é simples e visa dar aos leitores uma impressão mais intuitiva da criptografia/descriptografia da informação.
Princípio do algoritmo XOR
Do ponto de vista do método principal de criptografia, o método de transposição é muito simples, especialmente quando a quantidade de dados é pequena, é fácil adivinhar o texto simples a partir do texto cifrado e o método de substituição é eficaz e simples algoritmo.
A julgar pelas características de várias operações de substituição, a operação XOR é mais adequada para operações simples de criptografia e descriptografia. O princípio deste método é: quando um número A e outro número B são submetidos a XOR, outro número C será gerado. uma operação XOR em C e B, e C será restaurado para A.
Comparado com outros algoritmos de criptografia simples, as vantagens do algoritmo XOR são as seguintes.
(1) O algoritmo é simples e pode ser facilmente implementado em linguagens de alto nível.
(2) É rápido e pode ser usado a qualquer hora e em qualquer lugar.
(3) É válido para qualquer caractere Ao contrário de alguns algoritmos de criptografia simples, que são válidos apenas para caracteres ocidentais, os caracteres chineses não podem ser restaurados aos caracteres originais após a criptografia e descriptografia.
Implementação do algoritmo XOR
A parte anterior introduziu o princípio de como usar a operação XOR para criptografia/descriptografia. Esta seção irá usá-lo para criptografar as informações de login do usuário. De acordo com o princípio do algoritmo de criptografia XOR apresentado na seção anterior, não é difícil escrever as seguintes funções de criptografia e descriptografia. Os algoritmos de criptografia são listados primeiro.
1 <!--encrypy_xor: Uma função de criptografia que simplesmente usa a operação XOR----------------------->
2 <?php
3 //Função de criptografia
4 função myEncrypt($string, $key)
5 {
6 for($i=0; $i<STRLEN($STRING); p $i++)<>
7 {
8 for($j=0; $j<STRLEN($KEY); p $j++)<>
9 {
10 $string[$i] = $string[$i]^$chave[$j];
11}
12}
13 retorna $string;
14}
A linha 4 define a função de criptografia myEncrypt(). O parâmetro de entrada $string é texto simples e $key é a chave;
O loop for externo nas linhas 6 a 12 percorre cada caractere da string de texto simples, enquanto o loop for interno (linhas 8 a 11) percorre cada caractere no texto simples e executa uma exceção em cada bit da operação OR. O princípio foi introduzido na seção anterior e não será reiterado.
Novamente, semelhante à função de criptografia, a seguinte função de descriptografia pode ser escrita.
1 //função de descriptografia
2 funções myDecrypt($string, $key)
3 {
4 for($i=0; $i<STRLEN($STRING); p $i++)<>
5 {
6 for($j=0; $j<STRLEN($KEY); p $j++)<>
7 {
8 $string[$i] = $key[$j]^$string[$i];
9}
10}
11 retorna $string;
12}
13?>
A linha 4 define a função de descriptografia myDecrypt (), o parâmetro de entrada $string é o texto cifrado e $key é a chave; a saída é o texto simples gerado usando $key como chave e usando o algoritmo de descriptografia XOR.
Abaixo, um exemplo de aplicação é usado para ilustrar melhor a função da função de criptografia.
1 //Exemplo
2 $minha_senha="cadeira";
3 echo "minha_senha = $minha_senha";
4 $minha_chave="1234567890";
5 $my_password_en=myEncrypt($my_password,$my_key);
6 echo "minha_senha_en = $minha_senha_en";
7 $my_password_de=myDecrypt($my_password_en,$my_key);
8 echo "my_password_de = $my_password_de";
A linha 3 primeiro define um texto não criptografado $my_password e depois define a chave $my_key na linha 4.
As linhas 5 e 6, respectivamente, chamam a função de criptografia para gerar texto cifrado e produzi-lo, por sua vez, o texto cifrado é descriptografado nas linhas 7 e 8.
Os resultados da execução do exemplo acima são os seguintes.
my_password = cadeira
my_password_en = RYPXC
my_password_de = cadeira
Implementando autenticação de identidade usando o algoritmo XOR
As duas partes anteriores introduziram o princípio e a implementação da criptografia/descriptografia de informações usando a operação XOR A seguir, este método será usado para criptografar a senha de login do usuário. Neste exemplo, para proteger a senha do usuário, o sistema deseja atingir os seguintes propósitos.
·Ao se cadastrar o usuário deverá preencher o formulário de senha de usuário.
·Além do próprio usuário, ninguém mais pode obter informações sobre sua senha, incluindo projetistas de sistemas e administradores de banco de dados.
·O sistema pode verificar a legitimidade do usuário com base na senha inserida pelo usuário.
Para atingir o objetivo acima, ao usar o algoritmo XOR, você pode escolher o nome de usuário como texto simples e a chave é uma senha definida pelo usuário e, em seguida, armazenar o nome de usuário criptografado no banco de dados.
Além disso, quando um usuário faz login, existem duas maneiras de verificar usuários legítimos.
(1) Criptografar novamente com base nas informações de nome de usuário (texto simples) e senha (chave) enviadas e usar as informações criptografadas para comparar com as informações de senha armazenadas no banco de dados. Se forem iguais, o usuário é legal, caso contrário. , o usuário é ilegal.
(2) Descriptografar com base nas informações de senha (texto simples) armazenadas no banco de dados e nas informações de senha (chave) inseridas pelo usuário e comparar as informações criptografadas com o nome de usuário enviado pelo usuário. é legítimo, caso contrário, para usuários ilegais.
Ambos os métodos podem atingir o terceiro propósito. Neste exemplo, o segundo método será usado. O código de implementação deste exemplo pode ser implementado com base na implementação da Seção 18.4.1 "Login do Usuário" e da Seção 18.4.2 "Verificar Usuário". A página "Login do Usuário" não precisa ser alterada. Verificar usuário" é o seguinte.
1 <?php
2 session_start(); //Carrega a biblioteca Session, que deve ser colocada na primeira linha
3 $nome_usuário=$_POST["nome_usuário"];
4 session_register("user_name"); //Registre a variável $user_name, observe que não há símbolo $
5
6 require_once("sys_conf.inc"); //Arquivo de configuração do sistema, incluindo informações de configuração do banco de dados
7 require_once("encrypy_xor.php"); //Contém arquivo de função de criptografia xor
8
9 //Conecta-se ao banco de dados
10 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
11 mysql_select_db($DBNAME); //Seleciona banco de dados my_chat
12
13 //Consulta se há informações do usuário logado
14 $str="selecione nome,senha do usuário onde nome ='$nome_usuário'";
15 $result=mysql_query($str,$link_id); //Executa consulta
16 @$rows=mysql_num_rows($result); //O número de registros obtidos dos resultados da consulta
17 $nome_usuário=$_SESSION["nome_usuário"];
18 $senha=$_POST["senha"];
19 $password_en=myEncrypt($user_name,$password); //Criptografa as informações do usuário
20
21 //Para usuários antigos
22 if($linhas!=0)
vinte e três {
24 lista($nome,$pwd)=mysql_fetch_row($resultado);
25 $password_de=myDecrypt($pwd,$password); //Descriptografa as informações do usuário
26
27 //Se a senha for digitada corretamente
28 if($nome_usuário==$senha_de)
29 {
30 $str="atualizar conjunto de usuário is_online =1 onde nome ='$user_name' e senha='$password_en'";
31 $result=mysql_query($str, $link_id); //Executa consulta
32 require("main.php"); //Vá para a página de bate-papo
33}
34 //Erro de entrada de senha
35 mais
36 {
37 require("relogin.php");
38}
39}
40 //Para novos usuários, grave suas informações no banco de dados
41 mais
42 {
43 $str="inserir no usuário (nome,senha,is_online) valores('$user_name', '$password_en',1)";
44 $resultado=mysql_query($str, $link_id); //Executa consulta
45 require("main.php"); //Vá para a página de bate-papo
46}
47 //Fecha o banco de dados
48 mysql_close($link_id);
49 ?>
A linha 7 introduz o arquivo de função de criptografia encrypy_xor.php, incluindo as duas funções introduzidas na seção anterior.
Na linha 19, o valor da senha criptografada é obtido através do nome de usuário e senha enviados pelo usuário, e para novos usuários, esse valor criptografado é armazenado no banco de dados na linha 44.
Além disso, para usuários antigos, obtenha as informações de nome de usuário e senha criptografada no banco de dados na linha 24, use esses dois valores para descriptografar na linha 25 e, em seguida, compare o valor descriptografado com as informações de nome de usuário enviadas pelo usuário na linha 28 para verificar a legitimidade do usuário.
A parte anterior dageração automática de chaves
apresentou como usar o algoritmo de criptografia XOR para criptografar as informações do usuário. As informações de senha inseridas pelo usuário na verdade se tornam a chave no algoritmo de criptografia e o nome do usuário é usado como texto simples. muito Completa bem a função, mas logicamente, esse método parece um pouco irracional.
Este artigo apresentará uma tecnologia que gera chaves automaticamente. Você pode usar as chaves geradas automaticamente para criptografar o texto simples da senha enviada pelo usuário, tornando a lógica mais razoável.
Neste exemplo, assume-se que a chave gerada tem 512 bits. O código é o seguinte.
1 <!--keygen.php: Gerar chaves automaticamente ------------------------------------>
2 <?php
3
4 //Gera automaticamente uma chave com comprimento $len
5 funções generate_key($len)
6 {
7 $ limite inferior = 35;
8 $ limite superior = 96;
9 $strMyKey = "";
10
11 para($i=1;$i<=$len;$i++)
12 {
13 $rnd=rand(0,100); //Gerar números aleatórios
14 $k = (($limite superior - $limite inferior) + 1) * $rnd + $limite inferior;
15 $strMyKey=$strMyKey.$k;
16}
17 retorna $strMyKey;
18}
19
20 //Escreve a chave do arquivo $file_name
21 função write_key($chave,$nome_arquivo)
vinte e dois {
23 $nomedoarquivo="C:key.txt";
24 $chave=gerar_chave($chave,512);
25
26 //Abra $filename usando o modo add, o ponteiro do arquivo estará no final do arquivo
27 if(!$handle=fopen($nome do arquivo,'w'))
28 {
29 print "Não é possível abrir o arquivo $filename";
30 saída;
31}
32
33 //Escreve $key no arquivo que abrimos.
34 if(!fwrite($handle,$key))
35 {
36 print "Não é possível gravar no arquivo $filename";
37 saída;
38}
39 fclose($handle);
40}
41
42 //Lê a chave no arquivo-chave
43 função get_key($nome_do_arquivo)
44 {
45 //Abrir arquivo
46 $fp = fopen ($nome_arquivo, "r");
47 $resultado="";
48 //Lê linha por linha
49 enquanto (!feof($fp))
50 {
51 $buffer = fgets($fp, 4096);
52 $resultado=$resultado.$buffer;
53}
54 retorna $resultado;
55}
56
57 ///*
58 $KeyLocation = "C:key.txt"; //Arquivo para salvar a chave
59$chave="123456";
60 write_key($chave,$KeyLocation);
61 echo get_key($KeyLocation);
62 //*/
63 ?>
O código inclui 3 funções.
·generate_key($len): gera automaticamente uma chave com comprimento $len
·write_key($key,$file_name): escreve a chave no arquivo $file_name
·get_key($file_name): lê o arquivo chave $file_name Quando o valor da chave
é usado, quando o usuário efetua login no sistema pela primeira vez, o valor da chave é gerado automaticamente para o usuário. Existem duas maneiras de lidar com esse valor da chave.
(1) Armazená-la em um determinado campo do banco de dados. A desvantagem deste método é que a segurança da chave no banco de dados não pode ser garantida
; de serem obtidos por terceiros, mas a desvantagem desse método é que quando os usuários usam outras máquinas para acessar o sistema, eles não conseguem fazer login.
Neste exemplo, o método 2 será usado.
Especificamente, as linhas 11 a 18 do código acima geram continuamente chaves gerando números aleatórios e aumentam sua complexidade por meio de um cálculo. Os valores de limite inferior e superior são, na verdade, o intervalo de caracteres ASCII que você deseja usar para criptografia. Abaixo está um exemplo de um arquivo de chave gerado.
208123915925183361116049369344372701567721435181102718332639307390344373445407
524316475863232913993383189547474747394154915312639841226741894189965623523913
011164730113445201935692839710274127251577929493941487145611337531549110895367
593586318332391170941272701152344371709270125776235313540032267139933835677407
617384135696111239130732949469623520815987524358635491542913374933524334454251
400327015367133759324537171709152357391089524342514685239122673135531363151191
833412771743139654…
最后,需要把密钥保存在服务器上一个安全的地方,然后就可以利用其和诸如XOR这样的加密算法来对用户信息进行加密/解密了。 Como usar esta chave no XOR apresentado na seção anterior é muito simples e não será descrito em detalhes. 2 páginas no total. 9 7 1 2