Criptografando usando o padrão PKCS#7

Boa tarde,

Ao executar o trecho a seguir:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
Eu tenho uma Exception grandona… mas q ja pesquisei pra caramba sobre ela e sei q esse trecho q importa:

caused by: java.lang.SecurityException: Cannot set up certs for trusted CAs at javax.crypto.SunJCE_b.<clinit>(DashoA12275)

Eu desconfio q alguma coisa q tenho q fazer sobre o jce.jar. Mas nao lembro o q nem como… ^ ^

Alguém pode me ajudar?

Acredito que seja porque o provider JCE (jce.jar) que você está usando não esteja assinado. A partir de JDK 1.4, o provider de JCE tem que ser assinado para funcionar.

Para conseguir um certificado que possa ser usado para assinar o provider, veja em http://java.sun.com/j2se/1.4.2/docs/guide/security/jce/HowToImplAJCEProvider.html#Step%205a
É free, mas demora um pouquinho para enviarem.

Acho q nao eh isso… pois eu baixei o “Unlimited Strength Java™ Cryptography Extension Policy Files for the Java™ 2 Platform, Standard Edition Development Kit, v5.0” e o erro continua. Com o provider da Assembla, eu consigo criptografar utilizando RSA. Mas preciso usar o algoritmo “AES/CBC/PKCS7Padding” para criptografar no padrão PKCS#7. E queria usar a Bouncy Castle pra servir tanto pra windows quanto pra linux.

[quote=TiagoFoil]Acho q nao eh isso… pois eu baixei o “Unlimited Strength Java™ Cryptography Extension Policy Files for the Java™ 2 Platform, Standard Edition Development Kit, v5.0” e o erro continua. Com o provider da Assembla, eu consigo criptografar utilizando RSA. Mas preciso usar o algoritmo “AES/CBC/PKCS7Padding” para criptografar no padrão PKCS#7. E queria usar a Bouncy Castle pra servir tanto pra windows quanto pra linux.
[/quote]

Se você estiver usando o jar assinado da Bouncy Castle, realmente o problema não é este.

É que eu já tive problema quando instalei vários providers, pois não estava instanciando passando o provider como parametro:

Cipher.getInstance("Algoritimo", "Provider");

ou java.security não estava corretamente configurado.

Se você estiver usando JDK 1.5, pode usar o algoritmo RSA sem instalar outro provider:
http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#SupportRSAEncryption

a) PKCS#7 não é um algoritmo e sim um padrão.
b) PKCS7Padding e PKCS5Padding são a mesma coisa, e é preferível usar PKCS5Padding.
c) Para exemplos de como usar o BouncyCastle, vá até
http://media.wiley.com/product_ancillary/30/07645963/DOWNLOAD/beg_crypto_examples.zip e baixe os exemplos.