Olá Habr! Apresento a você a tradução de 6, 7 e 8 artigos 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
Par de chaves
A classe KeyPair ( java.security.KeyPair ) é um par de chaves assimétricas (chave pública + chave privada). Uma instância KeyPair é comumente usada em criptografia assimétrica (criptografia ou assinatura de dados). Normalmente, uma instância de KeyPair é obtida no armazenamento de chaves Java ou KeyPairGenerator, que será discutido mais adiante neste artigo.
Acesso Ă chave pĂşblica
Você pode acessar a chave pública de uma instância do KeyPair chamando seu método getPublic () . Um exemplo de obtenção de uma chave pública:
PublicKey publicKey = keyPair.getPublic();
Acesso Ă chave privada
Você também pode acessar a chave privada da instância KeyPair chamando seu método getPrivate () . Aqui está um exemplo de como obter uma chave privada:
PrivateKey privateKey = keyPair.getPrivate();
Gerador de chaves
A classe KeyGenerator ( javax.crypto.KeyGenerator ) é usada para gerar chaves de criptografia simétricas. Uma chave de criptografia simétrica é uma chave usada para criptografar e descriptografar dados usando um algoritmo de criptografia simétrica.
Criando uma instância do KeyGenerator
Antes de poder usar a classe KeyGenerator, você deve criar uma instância do KeyGenerator. Uma instância de KeyGenerator é criada chamando o método estático getInstance () , como um parâmetro que leva o nome do algoritmo de criptografia para o qual a chave está sendo criada. Aqui está um exemplo de criação de uma instância do KeyGenerator:
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
Este exemplo cria uma instância do KeyGenerator que pode gerar chaves para o algoritmo de criptografia AES.
Inicialização do KeyGenerator
Após criar uma instância do KeyGenerator, você deve inicializá-la. A inicialização de uma instância é realizada chamando o método init () . Exemplo de inicialização da instância KeyGenerator:
SecureRandom secureRandom = new SecureRandom(); int keyBitSize = 256; keyGenerator.init(keyBitSize, secureRandom);
O método init () usa dois parâmetros: o comprimento da chave e SecureRandom , que é usado durante a geração da chave.
Geração de chaves
Após inicializar a instância KeyGenerator, você pode usá-lo para gerar as chaves. A geração de chave é realizada chamando o método generateKey () . Aqui está um exemplo de geração de uma chave simétrica:
SecretKey secretKey = keyGenerator.generateKey();
Gerador de par de chaves
A classe KeyPairGenerator ( java.security.KeyPairGenerator ) é usada para gerar pares de chaves assimétricos. Um par de chaves assimétricas consiste em duas chaves: a primeira chave geralmente é usada para criptografar dados e a segunda chave é usada para descriptografar dados criptografados com a primeira chave.
Chaves pĂşblicas e privadas
O tipo mais famoso de par de chaves assimétricas é o tipo de par de chaves da forma: chave pública + chave privada. A chave privada é usada para criptografar dados e a chave pública é usada para descriptografar dados. De fato, você também pode criptografar dados usando a chave pública e descriptografá-los usando a chave privada. A chave privada geralmente é mantida em segredo, e a chave pública pode ser conhecida por todos. Portanto, se Jack criptografa alguns dados com sua chave privada, qualquer pessoa que possua a chave pública de Jack pode descriptografá-la.
Criando uma instância do KeyPairGenerator
Para usar o KeyPairGenerator, você deve primeiro criar uma instância da classe KeyPairGenerator. Uma instância do KeyPairGenerator é criada chamando o método getInstance () . Aqui está um exemplo de criação de uma instância:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
O método getInstance () aceita o nome do algoritmo de criptografia a ser usado. Neste exemplo, usamos o algoritmo RSA.
KeyPairGenerator de inicialização
Dependendo do algoritmo, pode ser necessário inicializar uma instância do KeyPairGenerator. KeyPairGenerator é inicializado chamando seu método initialize () . Exemplo de inicialização da instância KeyPairGenerator:
keyPairGenerator.initialize(2048);
Neste exemplo, um KeyPairGenerator Ă© inicializado para gerar chaves de 2048 bits.
Geração de par de chaves
Para gerar um par de chaves usando KeyPairGenerator, o método generateKeyPair () é chamado. Aqui está um exemplo de geração de pares de chaves:
KeyPair keyPair = keyPairGenerator.generateKeyPair();