Criptografia em Java. Classe Mac

Olá Habr! Apresento a você a tradução do quarto artigo "Java Mac", 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 Java
  2. Cifra Java
  3. Messagedigest
  4. Mac
  5. Assinatura
  6. Par de chaves
  7. Keygenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Certificado
  12. CertificateFactory
  13. CertPath

Código de autenticação de mensagem (MAC)


O Java Mac ( javax.crypto.Mac ) gera código de autenticação de mensagens (MAC) a partir de dados binários. MAC é um resumo da mensagem criptografado com uma chave secreta. Somente com uma chave secreta você pode verificar a autenticidade do MAC.


Instanciação


Antes de usar a classe Mac, você deve criar uma instância do Mac. Uma instância de uma classe Mac é criada usando o método getInstance () . Aqui está um exemplo de criação de uma instância do Mac:


Mac mac = Mac.getInstance("HmacSHA256"); 

O parâmetro de string passado para getInstance () contém o nome do algoritmo usado. Nesse caso, o algoritmo HmacSHA256 é usado.


Inicialização


Após criar a instância, o Mac deve ser inicializado. Uma instância do Mac é inicializada chamando o método init () , passando a chave secreta que será usada pela instância como parâmetro. Aqui está um exemplo de inicialização de uma instância do Mac:


 byte[] keyBytes = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15}; String algorithm = "RawBytes"; SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm); mac.init(key); 

O método init () aceita uma instância de Key . Este exemplo usa SecretKeySpec , que implementa a interface Key.


Cálculo MAC


Usando a instância do MAC (após a inicialização), você pode começar a calcular os dados do MAC. Para calcular o valor MAC, você chama o método update () ou doFinal () . Se você tiver apenas um bloco de dados para calcular o MAC, poderá chamar diretamente doFinal () , por exemplo:


 byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] macBytes = mac.doFinal(data); 

Se você tiver vários blocos de dados para calcular o MAC, por exemplo, se você ler o arquivo bloco por bloco, deverá chamar o método update () para cada bloco e terminar com doFinal () no último bloco. Aqui está um exemplo:


 byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] data2 = "0123456789".getBytes("UTF-8"); mac.update(data); mac.update(data2); byte[] macBytes = mac.doFinal(); 

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


All Articles