Criptografia em Java. Classe MessageDigest

Olá Habr! Apresento a você a tradução do terceiro artigo "Java MessageDigest", de Jakob Jenkov, a partir de uma série de artigos para iniciantes que desejam aprender o básico da criptografia em Java.


Sumário:


  1. Criptografia
  2. Cifra
  3. Messagedigest
  4. Mac
  5. Assinatura
  6. Par de chaves
  7. Keygenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Certificado
  12. CertificateFactory
  13. CertPath

Java MessageDigest


A classe Java MessageDigest representa uma função de hash criptográfico que pode calcular um resumo da mensagem a partir de dados binários. Quando você recebe um conjunto de dados criptografados, não pode ter certeza de que eles não foram alterados durante o transporte. Um resumo da mensagem ajuda a resolver esse problema.


Para determinar se os dados criptografados foram modificados durante o transporte, o remetente deve calcular o resumo da mensagem a partir dos dados e enviá-lo junto com os dados. O outro lado, recebendo dados criptografados e um resumo da mensagem, pode recalcular o resumo da mensagem a partir dos dados e verificar se o resumo calculado da mensagem corresponde ao resumo recebido com os dados. Se os dois resumos das mensagens corresponderem, é possível que os dados criptografados não tenham sido alterados durante o transporte.


Existem várias condições que devem ser atendidas para que um resumo da mensagem seja útil como mecanismo de detecção de alterações. No entanto, as condições exatas fazem parte de uma teoria criptográfica que não é discutida neste artigo, mas apenas explica como usar Java para receber um resumo da mensagem na classe MessageDigest.


Criando uma instância do MessageDigest


Para instanciar a classe MessageDigest, o método estático getInstance () da classe MessageDigest é chamado. Aqui está um exemplo de criação de uma instância do MessageDigest:


MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); 

O parâmetro string passado para o método getInstance () determina o algoritmo de compilação usado para uma mensagem específica.


Algoritmos de resumo da mensagem


A API Java Cryptography suporta os seguintes algoritmos de resumo de mensagens (provedores externos de criptografia podem suportar mais):


  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

Nem todos esses algoritmos são igualmente seguros. No momento da redação deste artigo, é recomendável usar o SHA-256 ou superior para obter o mais alto nível de segurança possível.


Cálculo do resumo da mensagem


Ao criar uma instância do MessageDigest, você pode usá-lo para calcular o resumo da mensagem. Se você tiver um bloco de dados para calcular o resumo da mensagem, use o método digest () . Veja como é o cálculo do resumo da mensagem de um único bloco de dados:


 byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1); 

Se houver vários blocos de dados a serem incluídos no mesmo resumo da mensagem, chame o método update () e termine com uma chamada para o resumo () . Aqui está a aparência de um cálculo de resumo de mensagens de vários blocos de dados:


 byte[] data1 = "0123456789".getBytes("UTF-8"); byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(data1); messageDigest.update(data2); byte[] digest = messageDigest.digest(); 

Source: https://habr.com/ru/post/pt444974/


All Articles