Existe alguma api que facilite a criação do par de chaves (publica e privada) no padrão RSA 1024?
Não preciso do algoritimo de criptografia, somente do algoritimo de criação de chaves.
obrigado.
Existe alguma api que facilite a criação do par de chaves (publica e privada) no padrão RSA 1024?
Não preciso do algoritimo de criptografia, somente do algoritimo de criação de chaves.
obrigado.
Pega os códigos fonte da API Bouncycastle e procura lá que deve ter alguma classe que faz isso.
A criação do par de chaves é relativamente fácil em Java puro, sem usar o BouncyCastle. Basta fazer algo parecido com o seguinte (o exemplo abaixo gera um par de chaves de 1024 bits):
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPublicKey;
public class TesteParChavesRSA {
public static void main(String[] args) throws Exception {
System.out.println("Gerando um par de chaves...");
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();
System.out.println("Todos os valores abaixo são impressos em hexadecimal.");
System.out.println("Imprimindo a chave pública obtida:");
PublicKey pubK = (RSAPublicKey) kp.getPublic();
RSAPublicKey rsapubk = (RSAPublicKey) pubK;
System.out.println("Módulo (chave pública): "
+ rsapubk.getModulus().toString(16));
System.out.println("Expoente (chave pública): "
+ rsapubk.getPublicExponent().toString(16));
System.out.println("Imprimindo a chave privada obtida:");
PrivateKey privK = kp.getPrivate();
RSAPrivateCrtKey rsaprivk = (RSAPrivateCrtKey) privK;
System.out.println("Módulo (chave privada): "
+ rsaprivk.getModulus().toString(16));
System.out.println("Expoente (chave privada): "
+ rsaprivk.getPrivateExponent().toString(16));
System.out.println("P (chave privada): "
+ rsaprivk.getPrimeP().toString(16));
System.out.println("Q (chave privada): "
+ rsaprivk.getPrimeQ().toString(16));
System.out.println("Expoente P (chave privada): "
+ rsaprivk.getPrimeExponentP().toString(16));
System.out.println("Expoente Q (chave privada): "
+ rsaprivk.getPrimeExponentQ().toString(16));
System.out.println("Coeficiente CRT (chave privada): "
+ rsaprivk.getCrtCoefficient().toString(16));
}
}
Exemplo de saída:
Gerando um par de chaves...
Todos os valores abaixo são impressos em hexadecimal.
Imprimindo a chave pública obtida:
Módulo (chave pública): d8a19ae9961ab696773c0cf2b28bf0a9ef78077b1c0b874359dbd5c6d54ea28070f22f4fba14b2c43299c2694f351afe08ea0260143dacf3761d197f8fe0b5e1b10c811b01b511c1683786c0eec73ffa0d750d3387b160dd25feac530ae1639d07ec18101427856d168d6077a1751201a88adefa43cb40a1fd4bf11553ea6d83
Expoente (chave pública): 10001
Imprimindo a chave privada obtida:
Módulo (chave privada): d8a19ae9961ab696773c0cf2b28bf0a9ef78077b1c0b874359dbd5c6d54ea28070f22f4fba14b2c43299c2694f351afe08ea0260143dacf3761d197f8fe0b5e1b10c811b01b511c1683786c0eec73ffa0d750d3387b160dd25feac530ae1639d07ec18101427856d168d6077a1751201a88adefa43cb40a1fd4bf11553ea6d83
Expoente (chave privada): cd20d198881b4973d6f9d4e4e76e9d77bc9af2b27f4ee7493e486cf837399ba475cece3ff75aec1fde2e3caa0d67a2e493ba4a7f820b18befcc3f746140e5b09d874ad315ca33e1583683986ecd99ebefba972c66dfbd78368a39d24d641d0158eab9f97a0daf34defe1f90d9f6dc6a0c3255614ced39f20c3dba29bf0efc4b9
P (chave privada): ff4cc863c9a698eca695efa6b240fa5b99df5ef331f1b372e3389e381ee23bf72c8ae56bf77c6cf159f9ebc7010c08517c89c8133bbb4b99303daedfd4e6e017
Q (chave privada): d939ad6dcb663bc6400031d3c58ac6355bfd9c3323a9bfec8b2484070413c14205e5d4d93c27669c9a04ecc80e546d8bae530518eb1c109f54bfeb1c4390f575
Expoente P (chave privada): f1a46c7bbeeef809ee77365952991c1ebd9ae6154c2d990b623441d59eadc5d2638fa82d3417ca49fb3f09c2d7a3daefbdefefb6fcaf7f93a44c8e0c0048f2cb
Expoente Q (chave privada): bbfa4e9b49bdd19250c61a58618522db001d2a7392b40dd2dbe220a295a3a6c4c4a7cc16a5188f928b3221d94995442af11304c1388bd3d29d9b6b10cd637f15
Coeficiente CRT (chave privada): 2be7d3869ff0d257cc2fc71dab52cfbb2e9c1c0b125acf6be7bdbb8204c4223797a2f8dd4b427b43d5373526a98a7d0abc85825962609a438d8f06f8cdc3f5c7
Aham, se você postou no fórum “Java Micro Edition”, então provavelmente irá ter de usar o BouncyCastle, já que essas classes (javax.crypto etc.) não estão presentes no JavaME.