JCE ne peut pas authentifier le fournisseur BC dans l'application java swing
je crée une application basée sur le swing en JAVA qui utilise une technique de cryptage. Mais javax.cryptographique.KeyGenerator.getInstance ("AES"," BC") donne exception:
java.security.NoSuchProviderException: JCE cannot authenticate the provider BC
at javax.crypto.SunJCE_b.a(DashoA13*..)
at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
alors quel est le problème?
5 réponses
pour développer le commentaire de GregS, tous les jar fournisseurs JCE doivent être signés avant qu'ils ne soient fiables par votre Java runtime.
BouncyCastle fournit consciencieusement des jarres signées qui fonctionneront sans problème. Cependant, si vous extrayez des fichiers de classe à partir de ce JAR, ou si vous recompilez la source, cela supprimera la signature et fera rejeter le code par Java.
voir cette question ainsi liée: comment signer un fournisseur de sécurité JcE personnalisé
1. modifier jre\lib\security\java.sécurité
ajouter sécurité.Fournisseur.10 = org.bouncycastle.JCE.Fournisseur.BouncyCastleProvider
2. copie colombie-britannique*.pot de jre\lib\ext
pour ceux qui trouvent ce problème , mais en fait en utilisant SpongyCastle
, il pourrait être intéressant de savoir que sur Android il n'y a pas un tel test de signature et pour vos tests, vous pouvez utiliser SpongyCastle via l'openJDK-8 que cela ne se soucie pas des signatures ni.
pour référence, avec SpongyCastle l'erreur se lit:
java.lang.SecurityException: JCE cannot authenticate the provider SC
Plus d'informations dans cette question
pour moi, le numéro était bcprov-ext-jdk16.jar
était rejeté par sbt assembly
.
[warn] Merging 'META-INF/license/LICENSE.bouncycastle.txt' with strategy 'discard'
..
[warn] Merging 'META-INF/maven/org.jasypt/jasypt/pom.properties' with strategy 'discard'
[warn] Merging 'META-INF/maven/org.jasypt/jasypt/pom.xml' with strategy 'discard'
..
donc j'ai fini par utiliser le bouncycastle.jar
de -classpath
comme ci-dessous,
java -Denvironment=dev -cp chat-server.jar:/Users/prayagupd/.ivy2/cache/org.bouncycastle/bcprov-ext-jdk16/jars/bcprov-ext-jdk16-1.46.jar com.chat.server.ChatServer
ce qui fonctionne aussi c'est de mettre le bouncycastle.jar à $JAVA_HOME/jre/lib/ext
,
cp /Users/prayagupd/.ivy2/cache/org.bouncycastle/bcprov-ext-jdk16/jars/bcprov-ext-jdk16-1.46.jar $JAVA_HOME/jre/lib/ext/
$ ls -l $JAVA_HOME/jre/lib/ext/
total 55208
-rw-r--r-- 1 root wheel 1887089 May 7 21:22 bcprov-ext-jdk16-1.46.jar
-rw-rw-r-- 1 root wheel 3860502 Sep 5 2017 cldrdata.jar
-rw-rw-r-- 1 root wheel 8286 Sep 5 2017 dnsns.jar
-rw-rw-r-- 1 root wheel 44516 Sep 5 2017 jaccess.jar
-rwxrwxr-x 1 root wheel 18610276 Sep 5 2017 jfxrt.jar
-rw-rw-r-- 1 root wheel 1179093 Sep 5 2017 localedata.jar
-rw-rw-r-- 1 root wheel 1269 Sep 5 2017 meta-index
-rw-rw-r-- 1 root wheel 2022735 Sep 5 2017 nashorn.jar
-rw-rw-r-- 1 root wheel 41672 Sep 5 2017 sunec.jar
-rw-rw-r-- 1 root wheel 274148 Sep 5 2017 sunjce_provider.jar
-rw-rw-r-- 1 root wheel 248726 Sep 5 2017 sunpkcs11.jar
-rw-rw-r-- 1 root wheel 68924 Sep 5 2017 zipfs.jar
FYI: au lieu de modifier java.sécurité et copie jar à \jre\lib\ext, ci-dessous les étapes ont résolu mon problème aussi bien.
- ajouter une garantie.addProvider (new org.bouncycastle.JCE.Fournisseur.BouncyCastleProvider ()) dans votre classe.
- ajouter a permis à bcprov.*.dépendance jar dans pom.XML.
- mettre bcprov.*.jar to your specific folder(E. g: \lib), puis le renvoyer lors de l'exécution du projet.