I did not try it with SunJCEProvider but still BouncyCastle. I'm not sure if the complex deployment tasks described above are really necessary. Therefore I stripped my code to a small and complete AES128 JSP-ToGo example. It is tested on 10.2.0.1.0 WinXP.
Hope that gives some light.
**********************************************************************
install stuff:
**********************************************************************
SQL> connect system
CREATE USER test IDENTIFIED BY test;
GRANT CONNECT, RESOURCE TO test;
call dbms_java.grant_permission(
'TEST',
'java.security.SecurityPermission',
'putProviderProperty.BC',
'' );
call dbms_java.grant_permission(
'TEST',
'java.security.SecurityPermission',
'insertProvider.BC',
'' );
commit;
C:\cryptotest>loadjava -u test/[email protected] -v lib\bcprov-jdk13-134.jar
SQL>connect test
@src\de\hg\Crypto.java
create or replace FUNCTION HGCryptoTest
return VARCHAR2 as language java name
'de.hg.Crypto.test() return java.lang.String';
/
set serveroutput on size 10000
call dbms_java.set_output(10000);
select HGCryptoTest from dual;
**********************************************************************
content of file Crypto.java:
**********************************************************************
create or replace and compile java source named HGCrypto as package de.hg;
import java.security.GeneralSecurityException;
import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
public class Crypto {
private static boolean initialized = false;
public static String test() {
try {
if(!initialized) {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
initialized = true;
}
KeyGenerator keyGen = KeyGenerator.getInstance("AES"/*, "BC"*/);
keyGen.init(128);
Key key = keyGen.generateKey();
Cipher cipher = Cipher.getInstance("AES"/*, "BC"*/);
System.out.println("Cipher provider: " + cipher.getProvider());
byte[] data = "Hello World!".getBytes();
System.out.println("Original data : " + new String(data));
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(data);
System.out.println("Encrypted data: " + new String(result));
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] original = cipher.doFinal(result);
System.out.println("Decrypted data: " + new String(original));
return "ok";
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
return "error";
}
}
/
**********************************************************************