Pourquoi java.de sécurité.NoSuchProviderException Pas d'un tel fournisseur de: colombie-britannique?
Le pot (bcprov-jdk16-145.jar) a été ajouté au projet, Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider())
a été ajouté à la classe, et BouncyCastleProvider.PROVIDER_NAME
ne retour "BC", mais AesFileIo.writeFile() envoie toujours des java.security.NoSuchProviderException No such provider: BC
. Des idées?
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class AesFileIo {
private static final String AES_ALGORITHM = "AES/CTR/NoPadding";
private static final String PROVIDER = BouncyCastleProvider.PROVIDER_NAME;
private static final byte[] AES_KEY_128 = { //Hard coded for now
78, -90, 42, 70, -5, 20, -114, 103,
-99, -25, 76, 95, -85, 94, 57, 54};
private static final byte[] IV = { //Hard coded for now
-85, -67, -5, 88, 28, 49, 49, 85,
114, 83, -40, 119, -65, 91, 76, 108};
private static final SecretKeySpec secretKeySpec =
new SecretKeySpec(AES_KEY_128, "AES");
private static final IvParameterSpec ivSpec = new IvParameterSpec(IV);
public void AesFileIo() {
Security.addProvider(new org.bouncycastle.jce.provider
.BouncyCastleProvider());
}
public void writeFile(String fileName, String theFile) {
try {
Cipher cipher = Cipher.getInstance(AES_ALGORITHM, PROVIDER);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
byte[] encrypted = cipher.doFinal(theFile.getBytes());
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream(fileName));
os.write(encrypted);
os.flush();
os.close();
} catch (Exception e) {
StackTraceElement se = new Exception().getStackTrace()[0];
System.err.println(se.getFileName() + " " + se.getLineNumber()
+ " " + e);
}
}
}
- Veuillez consulter ce lien, stackoverflow.com/questions/39097099/...
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas très familier avec le sdk Android, mais il semble que le
android-sdk
est livré avec leBouncyCastle
fournisseur déjà ajouté à la sécurité.Ce que vous avez à faire dans l'environnement PC est juste de l'ajouter manuellement,
si vous avez accès à la
policy
fichier, il suffit d'ajouter une entrée de type:Avis de la
.5
il est égal à un nombre séquentiel de la déjà ajouté des fournisseurs.Security.addProvider
dans votre code, juste pour s'assurer qu'il est chargé, et peut-être que vous devrez ajouter votrejar
à votre projet 🙂private static final String PROVIDER = BouncyCastleProvider.PROVIDER_NAME
(qui décide de "BC") comme un champ dans le code, et j'ai ajouté le pot au projet, mais qui continuer à obtenirjava.security.NoSuchProviderException: No such provider: BC
. Je vais modifier ma question de départ, y compris par l'ensemble de la classe.Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
plutôt queCipher cipher = Cipher.getInstance(AES_ALGORITHM, PROVIDER);
. Je suppose que leSecurity.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
des forces le "BC" et leCipher.getInstance(AES_ALGORITHM, PROVIDER);
est tout simplement pas comprise dans ce contexte.vous pouvez ajouter un fournisseur de services de sécurité par l'édition de java.sécurité
en ajoutant
de sécurité.le fournisseur.=org.bouncycastle.la jce.fournisseur de.BouncyCastleProvider
ou ajouter une ligne dans votre dessus de votre classe
vous pouvez utiliser en dessous de la ligne de spécifier le fournisseur lors de la spécification des algorithmes
si vous utilisez un autre fournisseur comme Château Gonflable puis
Vous pouvez ajouter un fournisseur de services de sécurité par l'édition de java.de sécurité avec l'aide de code suivant avec la création de bloc statique:
Si vous utilisez maven projet, alors vous devrez ajouter de la dépendance BouncyCastleProvider comme suit pom.xml fichier de votre projet.
Si vous utilisez java normal de projet, alors vous pouvez ajouter un téléchargement bcprov-jdk15on-147.jar à partir du lien ci-dessous et modifier votre classpath.
http://www.java2s.com/Code/Jar/b/Downloadbcprovextjdk15on147jar.htm
Pour ceux qui utilisent des serveurs web assurez-vous que le bcprov-jdk16-145.jar a été installé dans vous serveurs lib, pour weblogic dû mettre le pot dans: