Criptografia em Java. Classe de assinatura

Olá Habr! Apresento a você a tradução do quinto artigo "Java Signature", de Jakob Jenkov, 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

Assinatura Java


A classe Signature ( java.security.Signature ) cria uma assinatura digital para dados binários. Uma assinatura digital é um resumo da mensagem criptografada com a chave privada de um par de chaves privada / pública. Qualquer pessoa que possua a chave pública pode verificar a assinatura digital.


Crie uma instância de assinatura


Antes de poder usar a classe Signature, instale essa classe chamando o método estático getInstance () . Abaixo está um exemplo no qual uma instância de assinatura é criada:


Signature signature = Signature.getInstance("SHA256WithDSA"); 

O parâmetro string passado para o método getInstance () determina o algoritmo de criptografia de assinatura digital usado.


Inicialização da Instância de Assinatura


Após criar a instância Signature, você precisa inicializá-la antes de começar a usá-la. A instância de assinatura é inicializada chamando seu método init () . Um exemplo de inicialização de uma instância de assinatura Java:


 SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair(); signature.initSign(keyPair.getPrivate(), secureRandom); 

Como você pode ver, a instância Signature é inicializada com a chave privada do par de chaves secretas / públicas e a instância SecureRandom.


Criação de Assinatura Digital


Quando a instância de assinatura é inicializada, você pode usá-la para criar assinaturas digitais. Uma assinatura digital é criada chamando o método update () (uma ou mais vezes) e terminando com uma chamada para assinar () . Exemplo de criação de uma assinatura digital para dados binários:


 byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature.update(data); byte[] digitalSignature = signature.sign(); 

Verificação de assinatura digital


Se você deseja verificar uma assinatura digital criada por outra pessoa, você deve inicializar a instância de assinatura no modo de verificação (em vez do modo de assinatura). É assim que a inicialização de uma instância de Signature no modo de validação se parece:


 Signature signature = Signature.getInstance("SHA256WithDSA"); signature.initVerify(keyPair.getPublic()); 

Observe que a instância de assinatura agora é inicializada no modo de verificação, passando a chave pública do par de chaves como parâmetro. Após a inicialização no modo de verificação, você pode usar a instância Signature para verificar a assinatura digital:


 byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature2.update(data2); boolean verified = signature2.verify(digitalSignature); 

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


All Articles