ivparameterspec - JCE no puede autenticar al proveedor BC en la aplicación java swing
java encrypt password (5)
1. editar jre / lib / security / java.security
Añada security.provider.10 = org.bouncycastle.jce.provider.BouncyCastleProvider
2. copia bc * .jar a jre / lib / ext
Estoy creando una aplicación basada en swing en JAVA que utiliza alguna técnica de encriptación. Pero javax.crypto.KeyGenerator.getInstance ("AES", "BC") da excepción:
java.security.NoSuchProviderException: JCE cannot authenticate the provider BC
at javax.crypto.SunJCE_b.a(DashoA13*..)
at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
Entonces, ¿cuál es el problema?
FYI: en lugar de modificar java.security y copiar jar a / jre / lib / ext, a continuación los pasos resolvieron mi problema también.
- agregue Security.addProvider (new org.bouncycastle.jce.provider.BouncyCastleProvider ()) en su clase.
- agregue alcance provisto a la dependencia bcprov. *. jar en pom.xml.
- ponga bcprov. *. jar en su carpeta específica (p. ej .: / lib), luego remítalo cuando ejecute el proyecto.
Para ampliar el comentario de GregS, todos los JAR del proveedor de JCE deben estar firmados antes de que el tiempo de ejecución de Java les otorgue la confianza.
BouncyCastle suministra diligentemente JAR firmados que funcionarán sin problemas. Sin embargo, si extrae los archivos de clase de este JAR o recompila el origen, eliminará la firma y hará que Java rechace el código.
Consulte esta pregunta relacionada con SO: cómo firmar un proveedor de seguridad JCE personalizado
Para aquellos que encuentran este problema pero realmente usan SpongyCastle
, puede ser interesante saber que en Android no existe una prueba de firma y para sus pruebas puede usar SpongyCastle a través de openJDK-8 ya que tampoco le importan las firmas.
Como referencia, con SpongyCastle el error dice:
java.lang.SecurityException: JCE cannot authenticate the provider SC
Más información en este número
Para mí, el problema era que bcprov-ext-jdk16.jar
estaba siendo descartado por el 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''
..
Así que terminé usando bouncycastle.jar
de -classpath
como a continuación,
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
Lo que también funciona es poner el bouncycastle.jar en $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