XOR apresenta brevemente: XOR é uma operação de bit baseada em binários, representada pelo símbolo xor ou ^. Seu algoritmo é usar o mesmo valor para 0 e 1 para cada bit binário do número nos dois lados do operador.
Um entendimento simples é adicionar sem transporte, como 1+1 = 0, 0+0 = 0, 1+0 = 1.
Descrição do requisito
Criptografar dados na era da informação é um tópico muito importante. Durante o processo de realização do projeto, também implementei um algoritmo de criptografia relativamente complexo. No entanto, como a tecnologia envolvida é confidencial, implementei uma versão relativamente simples aqui, usando os fluxos de entrada e saída de arquivos e operações XOR para criptografar arquivos arbitrários. Em relação ao algoritmo de descriptografia, é muito simples e pode ser resolvido pensando nisso.
Princípios da matemática
Esse algoritmo de criptografia usa a função dos dois números XOR. Vamos falar brevemente sobre o princípio do XOR. XOR é na verdade uma operação de codificação binária de um arquivo. Simplificando, quando os dois bits binários são iguais, são 0 e não 1 ao mesmo tempo. Veja o seguinte exemplo:
// Representação binária de 7: 00000111 // Representação binária de 2: 00000010 // o resultado obtido pelo XOR de ambos: 00000101 // o resultado obtido pelo número 5//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Implementação de código
importar java.io. letra: // O arquivo descriptografado "); // Crie um canal de dados para permitir que os dados binários da imagem fluam para o FileInputStream input = new FileInputStream (Infile); FileOutputStream Output = new FileOutputStream (outfile); // No processo de leitura, o Dados de leitura XOR é um número. Esse número deve ser gerado por algum tipo de algoritmo de criptografia. Aqui, basta compilar um número 928 (meu aniversário), depois executar um exclusivo ou e saí com os dados obtidos int content = 0; // Essa variável é usada para armazenar os dados de leitura. Obviamente, tipos de dados mais longos, como Long, podem ser usados aqui. Obviamente, também podemos usar outros tipos de dados. Apenas satisfaça os tipos de dados nas duas extremidades de ^ que podem ser convertidas entre si, pelo menos ele pode ser lançado enquanto ((content = input.read ())! =-1) // se o final do arquivo não for alcançado e continue lendo os dados e os dados de leitura foram armazenados na variável de conteúdo. -1 é o caráter final do arquivo {output.write (content^928); // grava no fluxo de arquivo de saída} // feche o recurso input.close (); output.close ();}}Avaliação da função de código
Para este código, a função pode basicamente atender às necessidades, mas existem deficiências. Primeiro, o algoritmo de criptografia não é usado para gerar a outra extremidade do número XOR e, segundo, não implementei a descriptografia do arquivo. De fato, a descriptografia é muito simples. Leia com cuidado o princípio matemático e você pode saber como escrever o algoritmo de descriptografia. De fato, a criptografia e a descriptografia não são implementadas ao mesmo tempo no mesmo local, mas a criptografia é calculada usando o mesmo algoritmo de criptografia.
Algoritmo aprimorado usando números aleatórios
No processo acima, na verdade, usamos um determinado valor para executar o XOR com o arquivo binário que lemos. Então, podemos usar um número aleatório para substituir esta convenção? A resposta é sim. Primeiro de tudo, usamos variáveis do tipo int para armazená -las. O intervalo que pode ser representado é: mais ou menos de 2,1 bilhões de números representáveis. O código específico é o seguinte:
// métodos para gerar números aleatórios importam java.util.*; Public class Randomtest {public static void main (string [] args) {aleatomia aleatória = new Random (); int num = random.nextInt (11); // indica que um número aleatório entre 0-10 é gerado. Deveríamos ser capazes de salvar o número aleatório gerado para criptografia e descriptografos para usar o System.out.println ("O número aleatório é:"+num); }}Algoritmo de criptografia aprimorado
Código de criptografia:
importar java.io. outfile = novo arquivo ("Driver: // Arquivo decryped"); // Crie um canal de dados para permitir que os dados binários da imagem fluam para o FILEInputStream input = new FileInputStream (infile); FileOutputStream output (new FileOutputStream (outfile); // outro número que gera inseto. entre 0 e 10 é gerado. Deveríamos ser capazes de salvar o número aleatório gerado para criptografia e descriptografos para usar o System.out.println ("O número aleatório é:"+num); // No processo de leitura, os dados de leitura serão XOR, um número, que deve ser gerado por algum tipo de algoritmo de criptografia. Aqui, simplesmente compilarei um número 928 (meu aniversário), e depois execute o XOR, e saio os dados obtidos do Content = 0; // Essa variável é usada para armazenar os dados de leitura. Obviamente, tipos de dados mais longos, como Long, podem ser usados aqui. Obviamente, também podemos usar outros tipos de dados. Precisamos apenas satisfazer os tipos de dados nas duas extremidades de ^ para se converter, e pelo menos a conversão do tipo fundido pode ser realizada enquanto ((content = input.read ())! =-1) // se não for atingido no final do arquivo, continue lendo os dados e os dados de leitura foram armazenados no conteúdo variável. -1 é o caractere final do arquivo {output.write (content^num); // grava no fluxo de arquivo de saída} // feche o recurso input.close (); output.close ();}}O lado da criptografia precisa informar o lado de descriptografia do número gerado no código acima, caso contrário, a descriptografia do arquivo não poderá ser implementada.
Código de descriptografia:
importar java.io. letra: // O arquivo descriptografado "); // Crie um canal de dados para permitir que os dados binários da imagem fluam para o FileInputStream input = new FileInputStream (Infile); FileOutputStream Output = new FileOutputStream (outfile); // No processo de leitura, o Dados de leitura XOR é um número. Esse número deve ser gerado por algum tipo de algoritmo de criptografia. Aqui, basta compilar um número 928 (meu aniversário), depois executar um exclusivo ou e saí com os dados obtidos int content = 0; // Essa variável é usada para armazenar os dados de leitura. Obviamente, tipos de dados mais longos, como Long, podem ser usados aqui. Obviamente, também podemos usar outros tipos de dados. Apenas satisfaça os tipos de dados nas duas extremidades de ^ que podem ser convertidas entre si, pelo menos ele pode ser lançado enquanto ((content = input.read ())! =-1) // se o final do arquivo não for alcançado e continue lendo os dados e os dados de leitura foram armazenados na variável de conteúdo. -1 é o caráter final do arquivo {output.Write (Content^ Número criptografado transmitido a partir da extremidade da criptografia); // grava no fluxo de arquivo de saída} // Fechar o recurso input.close (); output.close ();}}Melhorado novamente
De fato, em nosso código, o código de criptografia padrão deve ser gerado aleatoriamente e contém vários símbolos, como letras e números. Então, como geramos uma string de criptografia? Como converter uma string de criptografia em código binário depois de gerá -la? Forneça uma ideia: o uso de expressões regulares Java pode gerar qualquer string desejada e, em seguida, use o método de conversão da string para gerar o código binário correspondente. Eu mesmo implementei um método de geração de criptografia extremamente complexo, mas ele não pode ser divulgado. Isso envolve as informações de projetos de laboratório e há muitos campos de criptografia e muitos algoritmos de criptografia clássicos que também podem ser usados.
Resumir
O exposto acima é todo o conteúdo deste artigo sobre a explicação detalhada do princípio da criptografia e do uso de qualquer arquivo na operação Java XOR. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a este site:
Java usa operação XOR para implementar o código da instância do algoritmo de criptografia e descriptografia simples
Código de implementação de programação Java Exemplo de exor ou operação em strings hexadecimais
Análise de código de problemas XOR em Java
Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!