O algoritmo de criptografia simétrica é um algoritmo de criptografia anterior com tecnologia madura. No algoritmo de criptografia simétrica, o remetente dos dados processa o texto simples (dados originais) e a chave de criptografia (mi yue) junto com um algoritmo de criptografia especial, transformando-os em texto cifrado criptografado complexo e enviando-os. Depois que o destinatário recebe o texto cifrado, se quiser decifrar o texto original, ele precisa usar a chave usada para criptografia e o algoritmo inverso do mesmo algoritmo para descriptografar o texto cifrado, a fim de restaurá-lo para texto simples legível. No algoritmo de criptografia simétrica, apenas uma chave é usada. Tanto o remetente quanto o destinatário usam essa chave para criptografar e descriptografar os dados.
Algoritmos de criptografia Java simples são:
BASE estritamente falando é um formato de codificação, não um algoritmo de criptografia
MD (algoritmo de resumo de mensagem, algoritmo de resumo de mensagem)
SHA (Algoritmo de Hash Seguro, algoritmo de hash seguro)
HMAC (código de autenticação de mensagem hash, código de autenticação de mensagem hash)
Tipo 1. BASE
Base é um dos métodos de codificação mais comuns para transmissão de códigos de bytes de bits na Internet. Você pode visualizar RFC ~ RFC, que possui especificações detalhadas para MIME. A codificação base pode ser usada para transmitir informações de identificação mais longas em um ambiente HTTP. Por exemplo, no sistema Java Persistence Hibernate, Base é usado para codificar um identificador exclusivo longo (geralmente um UUID de -bit) em uma string, que é usada como parâmetro em formulários HTTP e URLs HTTP GET. Em outras aplicações, muitas vezes é necessário codificar dados binários em um formato adequado para colocação em uma URL (incluindo campos de formulário ocultos). Neste momento, a codificação Base é ilegível, ou seja, os dados codificados não serão diretamente visíveis a olho nu. (Fonte: Enciclopédia Baidu)
código de implementação java:
pacote com.cn. Criptografia unidirecional; import sun.misc.BASEEncoder; import sun.misc.BASEEncoder;/*A criptografia e a descriptografia BASE são bidirecionais e a solução inversa pode ser encontrada. aulas. Embora possa ser encontrado e usado no JDK, não pode ser encontrado na API. As classes que começam com sun e com.sun no JRE não são documentadas. Elas pertencem à base das bibliotecas de classes java e javax. A maioria de suas implementações estão relacionadas à plataforma subjacente e geralmente não são recomendadas. Estritamente falando, BASE é um formato de codificação, enquanto os algoritmos sem criptografia incluem principalmente as duas classes BASEEncoder e BASEDecoder. Só precisamos saber como usar os métodos correspondentes. Além disso, o número de bytes gerados após a criptografia BASE é um múltiplo de . Se o número de bytes for insuficiente, preencha-o com o símbolo =. BASE De acordo com a definição de RFC, Base é definida como: A codificação de transferência de conteúdo base é projetada para descrever qualquer sequência de bits em uma forma que não seja facilmente reconhecida diretamente por humanos. (A codificação de transferência de conteúdo base foi projetada para representar sequências arbitrárias de octetos em um formato que não precisa ser legível por humanos.) Comumente visto em e-mails e criptografia http. Ao interceptar informações http, você encontrará os campos de nome de usuário e senha para login. operações criptografadas via BASE. */public class BASE { /** * Descriptografia BASE* * @param key * @return * @throws Exception */ public static byte[] decryptBASE(String key) lança Exception { return (new BASEDecoder()).decodeBuffer(key ); } /** * criptografia BASE* * @param key * @return * @throws Exceção */ public static String encryptBASE(byte[] key) lança exceção { return (new BASEEncoder()).encodeBuffer(key); public static void main(String[] args) { String str=""; out.println("resultado=====dados criptografados=========="+resultado byte[]= BASE.decryptBASE(resultado); str=new String(resultado); System.out.println("str========Dados descriptografados========"+str } catch (Exception e) { e.printStackTrace(); ); } }}
Segundo tipo.
MD é o Algoritmo Message-Digest (Algoritmo Message-Digest), que é usado para garantir a transmissão de informações completa e consistente. É um dos algoritmos de hash amplamente utilizados em computadores (também traduzido como algoritmo de resumo e algoritmo de hash geralmente implementado nas principais linguagens de programação). A computação de dados (como caracteres chineses) em outro valor de comprimento fixo é o princípio básico do algoritmo hash. Os predecessores do MD são MD, MD e MD. Amplamente utilizado em tecnologia de criptografia e descriptografia, frequentemente usado para verificação de arquivos. verificar? Não importa o tamanho do arquivo, um valor MD exclusivo pode ser gerado após o MD. Por exemplo, a calibração ISO atual é a calibração MD. Como usar? Obviamente, o valor MD é gerado depois que o ISO passa pelo MD. Amigos que baixaram o linux-ISO geralmente viram a string MD ao lado do link de download. É usado para verificar se os arquivos são consistentes.
implementação java:
pacote com.cn. Criptografia unidirecional; import java.math.BigInteger; import java.security.MessageDigest;/*MD (algoritmo de resumo de mensagem, algoritmo de resumo de mensagem) Geralmente não usamos diretamente a criptografia MD acima. Normalmente, a matriz de bytes gerada pelo MD é entregue ao BASE e então criptografada para obter a string correspondente Digest: assembly*/public class MD { public static final String KEY_MD = "MD" public static String getResult(String inputStr); { System .out.println("========Dados antes da criptografia:"+inputStr); MessageDigest.getInstance(KEY_MD); byte[] inputData = inputStr.getBytes(); } System.out.println("Após criptografia MD:" + bigInteger.toString()); bigInteger.toString(); public static void main(String args[]) { try { String inputStr = "Criptografia simples";
O algoritmo MD possui as seguintes características:
. Compressibilidade: Para dados de qualquer comprimento, o comprimento do valor MD calculado é fixo.
, Fácil de calcular: É fácil calcular o valor MD a partir dos dados originais.
. Resistência à modificação: Se alguma alteração for feita nos dados originais, mesmo que apenas um único byte seja modificado, o valor MD resultante será muito diferente.
, Anticolisão fraca: Conhecendo os dados originais e seu valor MD, é muito difícil encontrar dados com o mesmo valor MD (ou seja, dados forjados).
, Forte anticolisão: É muito difícil encontrar dois dados diferentes para que tenham o mesmo valor MD.
A função do MD é permitir que informações de grande capacidade sejam "compactadas" em um formato confidencial (ou seja, converter uma sequência de bytes de qualquer comprimento em uma sequência de dígitos hexadecimais de determinado comprimento) antes de assinar a chave privada com digital. software de assinatura. Além do MD, os mais famosos incluem sha-, RIPEMD e Haval.
O terceiro tipo.SHA
O Algoritmo Hash Seguro é aplicável principalmente ao Algoritmo de Assinatura Digital DSA definido no DSS Padrão de Assinatura Digital. Para mensagens com comprimento inferior a ^ bits, o SHA produz um resumo da mensagem de um bit. Este algoritmo foi desenvolvido e aprimorado por especialistas em criptografia ao longo dos anos e tem sido cada vez mais aperfeiçoado e amplamente utilizado. A ideia desse algoritmo é receber um pedaço de texto simples e depois convertê-lo em um pedaço de texto cifrado (geralmente menor) de forma irreversível. Também pode ser entendido simplesmente como pegar uma sequência de códigos de entrada (chamada de pré-mapeamento). ou informações), e O processo de convertê-los em uma sequência de saída mais curta e de dígitos fixos, ou seja, um valor hash (também chamado de resumo de mensagem ou código de autenticação de mensagem). Pode-se dizer que o valor da função hash é uma "impressão digital" ou "resumo" do texto simples, portanto, a assinatura digital do valor hash pode ser considerada como a assinatura digital do texto simples.
implementação java:
pacote com.cn. Criptografia unidirecional; import java.math.BigInteger; import java.security.MessageDigest;/*SHA (Secure Hash Algorithm, algoritmo de hash seguro), assinatura digital e outras ferramentas importantes em aplicações de criptografia, são amplamente utilizadas. É amplamente utilizado em áreas de segurança da informação, como comércio eletrônico. Embora SHA e MD tenham sido quebrados por métodos de colisão, SHA ainda é um algoritmo de criptografia seguro reconhecido e é mais seguro que MD*/public class SHA { public static final String KEY_SHA = "SHA"; { BigInteger sha =null; System.out.println("========Dados antes da criptografia:"+inputStr byte[] inputData =); inputStr.getBytes(); tente { MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA); messageDigest.update(inputData); sha.toString()); } catch (Exceção e) {e.printStackTrace();} retorno sha.toString(); } public static void main(String args[]) { try { String inputStr = "Criptografia simples";
Comparação SHA com MD
Como ambos são derivados de MD, SHA- e MD são muito semelhantes entre si. Da mesma forma, seus pontos fortes e outras características são semelhantes, mas existem várias diferenças:
Segurança contra ataques de força bruta: A diferença mais significativa e importante é que o resumo SHA é mais longo que o resumo MD. Usando técnicas de força bruta, a dificuldade de gerar qualquer mensagem cujo resumo seja igual a um determinado resumo da mensagem é uma operação da ordem de grandeza para MD e uma operação da ordem de grandeza para SHA-. Dessa forma, o SHA- tem maior resistência contra ataques de força bruta.
Segurança contra criptoanálise: Devido ao design do MD, que é vulnerável a ataques de criptoanálise, o SHA- parece menos vulnerável a tais ataques.
Velocidade: SHA- é executado mais lentamente que MD no mesmo hardware.
O quarto tipo.HMAC
HMAC (código de autenticação de mensagem hash, código de autenticação de mensagem hash, protocolo de autenticação baseado no algoritmo hash de chave. O princípio do código de autenticação de mensagem para obter autenticação é usar uma função pública e uma chave para gerar um valor de comprimento fixo como um identificador de autenticação. Use uma função pública e uma chave para gerar um valor de comprimento fixo como um identificador de autenticação. Use isto Identifica a integridade da mensagem Utilize uma chave para gerar um pequeno bloco de dados de tamanho fixo, nomeadamente MAC, e adicione-o à mensagem, e depois transmita-o utilizando a chave partilhada com o remetente para autenticação.
código de implementação java:
pacote com.cn.Criptografia unidirecional;/*HMACHMAC(Autenticação de mensagem hash Código, código de autenticação de mensagem hash, protocolo de autenticação baseado em chave Algoritmo de hash O princípio do código de autenticação de mensagem é usar uma função pública e uma chave para gerar um valor de comprimento fixo como um identificador de autenticação e usar esse identificador para autenticar a integridade de. a mensagem. Sexo Use uma chave para gerar um pequeno bloco de dados de tamanho fixo, ou seja, MAC, e adicione-o à mensagem, e então transmita-o. O receptor usa a chave compartilhada com o remetente para autenticação, etc. javax.crypto.keyGenerator;importar javax.crypto.Mac;importar javax.crypto.SecretKey;importar javax.crypto.spec.SecretKeySpec;importar com.cn.comm.Tools;/** * Componente básico de criptografia*/ public abstract class HMAC { public static final String KEY_MAC = "HmacMD"; /** * Inicializar chave HMAC* * @return * @throws Exceção */ public static String initMacKey() lança exceção { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC); SecretKey secretKey = keyGenerator.generateKey(); return BASE.encryptBASE(secretKey.getEncoded()); key * @return * @throws Exceção */ public static String encryptHMAC(byte[] dados, String key) lança Exception { SecretKey secretKey = new SecretKeySpec(BASE.decryptBASE(key), KEY_MAC); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); String estática getResult(String inputStr) { String path=Tools.getClassPath(); fileSource=path+"/file/HMAC_key.txt"; System.out.println("========Dados antes da criptografia:"+inputStr String result=null; getBytes(); String key = HMAC.initMacKey(); /*Gerar chave*/ System.out.println("Mac key:===" + key); Tools.WriteMyFile(fileSource,key); resultado= HMAC.encryptHMAC(inputData, key); System.out.println("Após criptografia HMAC:===" + resultado); );} return resultado.toString(); public static String getResult(String inputStr) { System.out.println("========Dados antes da criptografia:"+inputStr); String path=Tools.getClassPath(); ;; try { /*Leia a chave do arquivo*/ key=Tools.ReadMyFile(fileSource); System.out.println("getResult key:===" + key } catch); (Exceção e) { e.printStackTrace();} String result=null; try { byte[] inputData = inputStr.getBytes(); .println("Após criptografia HMAC:===" + resultado } catch (Exception e) {e.printStackTrace();} return result.toString(); main(String args[]) { try { String inputStr = "Criptografia simples"; /*Use a mesma chave: Criptografe os dados: Verifique se os resultados das duas criptografias são iguais*/ getResult(inputStr); ); } catch (Exceção e) { e.printStackTrace();
O conteúdo acima são os diversos algoritmos de criptografia (quatro tipos) comumente usados em Java compartilhados pelo editor.