NoSuchAlgorithmException com Crypto

2 respostas
martui

:scrambleup: Estou tentando executar o código abaixo:

try {
            // Create the key
            KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
            SecretKey key = SecretKeyFactory.getInstance(
                "PBEWithMD5AndDES").generateSecret(keySpec);//>>Exceção lançada aqui!!!!<<
            ecipher = Cipher.getInstance(key.getAlgorithm());
            dcipher = Cipher.getInstance(key.getAlgorithm());

            // Prepare the parameter to the ciphers
            AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);

            // Create the ciphers
            ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
            dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
        } catch (java.security.InvalidAlgorithmParameterException e) {
        } catch (java.security.spec.InvalidKeySpecException e) {
        } catch (javax.crypto.NoSuchPaddingException e) {
        } catch (java.security.NoSuchAlgorithmException e) {
        } catch (java.security.InvalidKeyException e) {
        }

Ele funciona em uma máquina (com o Eclipse 3.0 e com o MyEclipse - e o JBoss 3) e em outra máquina (só com o Eclipse 3.0), não funciona. Nesta última máquina, eu ganho de presente uma java.security.NoSuchAlgorithmException. Alguma idéia? Algum .jar que pode estar faltando no CLASSPATH desta máquina? Qual? O jce.jar e o sunjce_provider.jar estão nela e no CLASSPATH. Alguma :idea: ?

:arrow: Ah! A parte do stackTrace dela que interessa (que vem logo após a chamada do meu método) está aí:
java.security.NoSuchAlgorithmException: Algorithm PBEWithMD5AndDES not available
	at javax.crypto.SunJCE_b.a(DashoA6275)
	at javax.crypto.SecretKeyFactory.getInstance(DashoA6275)

2 Respostas

louds

Verifica a versão da jvm delas, a cada minor release a Sun adiciona novos algoritmos.

T

Nunca sei direito se o Sun Provider está ou não implementando tal algoritmo na tal versão. Como eu tenho de escrever software que funcione na versão 1.3, 1.4.0, 1.4.1, 1.4.2, e se é Sun, ou IBM (como é o caso do Websphere que usa a JVM da IBM ), ou BEA etc. e não quero quebrar a cabeça com isso, simplesmente uso o BouncyCastle http://www.bouncycastle.org e fixo uma versão (por exemplo, 1.24). Aí sei exatamente o que está suportado ou não. ( http://www.bouncycastle.org/specifications.html diz exatamente o que está suportado na 1.24 )

Criado 2 de agosto de 2004
Ultima resposta 2 de ago. de 2004
Respostas 2
Participantes 3