junit java.de sécurité.NoSuchAlgorithmException: Impossible de trouver un fournisseur de soutien
Je suis en utilisant JUnit 4 [C:\eclipse\plugins\org.junit_4.11.0.v201303080030\junit.jar] en combinaison avec Eclipse (MARS, Version: Mars l'Étape 3 (4.5.0M3) Build id: 20141113-0320.
J'ai quelques tests test d'une classe simple et qui fonctionne bien. Mais maintenant arrivé au point où je voulais tester mes cryptage de classe, qui met en œuvre la suite de chiffrer fonction:
public String encrypt(String data) {
try {
SecretKeySpec KS = new SecretKeySpec(mKeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish/CBC/ZeroBytePadding"); //PKCS5Padding
cipher.init(Cipher.ENCRYPT_MODE, KS, new IvParameterSpec(mIv));
return bytesToHex(cipher.doFinal(data.getBytes()));
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
return null;
}
La Crypto classe n'est pas sous-classés...
public class Crypto {
Afin de tester cette Classe et plus de la fonction de crypter j'ai conçu l'appareil de test:
package my.junit4.example;
import static org.junit.Assert.*;
import org.junit.Test;
public class CryptoTest {
@Test
public void testEncryption() {
Crypto myCrypto = new Crypto();
String encodedString = myCrypto.encrypt("Secret");
assertTrue("The decrypted encrypted word should deliver the original string", encodedString.equals(myCrypto.decrypt(encodedString)));
}
}
Ce test est un échec, avec une trace de la pile:
java.security.NoSuchAlgorithmException: Cannot find any provider supporting Blowfish/CBC/ZeroBytePaddingnull
at javax.crypto.Cipher.getInstance(Cipher.java:535) at
my.junit.example.encrypt(Crypto.java:35) at
my.junit.example.CryptoTest.testEncrypt(CryptoTest.java:14) at
Cela n'a pas beaucoup de sens pour moi. Mais étant relativement nouveau à JUnit je soupçonne que le problème est à moi de ne pas comprendre la manière de formuler ces tests. Le code de cryptage - décryptage dans mon débogueur est de me donner le résultat souhaité. Mais comment puis-je obtenir que cela fonctionne avec JUnit. Quelle erreur évidente que j'ai fait?
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le Château Gonflable fournisseur pour l'exécution de Java. Vous pouvez voir comment installer le fournisseur en regardant le Château gonflable page wiki. Ni l'algorithme Blowfish, ni zéro de remplissage est pris en charge hors de la boîte, installations Java.
Le suivant fonctionne très bien sur ma boîte:
Assurez-vous que le fournisseur est également disponible pour le framework de test lorsqu'il est exécuté. Vous aurez besoin de mettre la
bcprov-jdk15on-[version].jar
dans le chemin de classe de l'exécution avant de pouvoir installer le fournisseur.Security
classe. Vérifiez que vous utilisez le bon JRE, il m'arrive de trouver une version totalement différente JRE est utilisé.Le problème vient de cette ligne:
L'algorithme que vous demandez n'est pas pris en charge sur votre système. Aucune raison particulière pour laquelle vous voulez que spécifique?
Les docs spécifiez les éléments suivants implémentations par défaut:
main
méthode et essayez d'utiliserencrypt
vous sera exécuté dans les mêmes problèmes.