estou desenvolvendo uma aplicação que vai usar criptografia RSA-2048, só que o cliente possui um hardware que gera o par de chaves. A chave pública ele passou para mim, e pediu que eu a usasse para criptografar os arquivos que o sistema vai enviar. Como eu faço para criptografar um arquivo utilizando essa chave e o algoritmo rsa?
A propósito, essa chave é uma string.
Perguntinha - ele mandou a chave pública neste formato aqui?
-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5F3OcVyc93DPSYgltiYN6zkwMAq30nGq1j8PSJbfqu99q1xwprK0Uh078d09piTrOwjdmqUUHjHhJqSdeSbnF0oYpXIQLXUb01wMfB6pKpfOHpLtDjAKJBeEfIK5Zig5nF1cQrKTIlR+LLR+7m0u5UDGBrO7yvd5dYDJAKh9BawIDAQAB-----END PUBLIC KEY-----
M
malbarbosa
Na verdade ele n me passou a chave publica ainda, mas vai me passar. Assim n sei te responder se o formato é esse.
estou tentando fazer pelo SecretKeySpec, você sabe me dizer se eu tenho como fazer através dele?
E
entanglement
SecretKeySpec não serve para usar com RSA. Ele requer algoritmos simétricos, como AES.
M
malbarbosa
uhm…então com o BouncyCastle eu consigo gerar uma criptografia usando uma chave publica e não gerando uma?
von.juliano
Suponho que ele vai te mandar o arquivo com a chave publica. Assim você lê a chave:
File f = new File("publicKey.der");
byte[] encodedKey = new byte[(int) f.length()];
new FileInputStream(keyFile).read(encodedKey);
Agora você vai criar o objeto PublicKey para poder encriptar o arquivo:
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey pk = factory.generatePublic(publicKeySpec);
Só falta criar a instância da classe Cipher, usando o RSA:
Cipher cipher = Cipher.getInstance("RSA");E com ela, criptografar e salvar o arquivo:
cipher.init(Cipher.ENCRYPT_MODE, pk);
CipherOutputStream os = new CipherOutputStream(new FileOutputStream(out), cipher);
os.write(aesKey);
os.close();
Vê se ajuda! Flw! :thumbup:
M
malbarbosa
Oi von.juliano,
tentei fazer a criptografia da forma que você me enviou e está ocorrendo o seguinte erro:
unknown object in factory: org.bouncycastle.asn1.DERInteger