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:
- Criptografia Java
- Cifra Java
- Messagedigest
- Mac
- Assinatura
- Par de chaves
- Keygenerator
- KeyPairGenerator
- Keystore
- Keytool
- Certificado
- CertificateFactory
- 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);