当前位置: 首页 > 面试题库 >

为什么java.security.NoSuchProviderException没有这样的提供者:BC?

夏涵畅
2023-03-14
问题内容

罐(bcprov-jdk16-145.jar)已添加到项目中,Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider())已添加到类中,并且BouncyCastleProvider.PROVIDER_NAME确实返回“
BC”,但AesFileIo.writeFile()仍会抛出java.security.NoSuchProviderException No such provider: BC。有任何想法吗?

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);
        }
    }
}

问题答案:

我对Android sdk不太熟悉,但是似乎提供程序android-sdk附带BouncyCastle的安全性已经增加了。

在PC环境中,您只需手动添加即可,

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

如果您有权访问该policy文件,只需添加一个条目,如:

security.provider.5=org.bouncycastle.jce.provider.BouncyCastleProvider

注意,.5它等于已添加的提供程序的序号。



 类似资料:
  • 为了防止实现细节泄漏,可以实现,而不是返回,然后需要从接口实现。因此,无论内部数据结构如何管理,对元素的访问都是通过进行的。 对于Java8,可能希望将添加到。(另请参阅《Java8lambdas》一书中关于支持的建议)。虽然添加方法并不困难(我也读过关于为什么Iterable不提供流的问题),但奇怪的是Java没有为添加接口来镜像思想。(好吧,可能有一个不同的名称,因为是为了永远使用CORBA的

  • 我当前的提供商有: 0-提供程序名称:SUN 1-提供程序名称:SUNRSAGN 2-提供程序名称:SunEC ... 9-提供商名称:SunPKCS11 CartaoCidadao 第九个提供者是我尝试使用的提供者,它使用pkcs11库。 使用info方法我可以看到它正在使用库: SunPKCS11 CartaoCidadao使用library/usr/local/lib/libpteidpkc

  • 问题内容: 由于某些原因,我的代码无法打开简单文件: 这是代码: 错误是: 自然地,我检查了这是文件的正确名称。 我尝试在文件中四处移动,提供文件open()的完整路径,但似乎都不起作用。 问题答案: 确保文件存在:用于查看当前工作目录中的文件列表 确保你位于自己认为所在的目录中(如果从IDE启动代码,则可能位于其他目录中) 然后,你可以: 调用,即文件所在的文件夹,然后像以前一样使用文件名打开文

  • 问题内容: 是什么意思? 错误不应该: 没有相应的文件和目录 只是被命名? 有什么故事或理由吗? 问题答案: 它是Error NO ENTry(或Error NO ENTity)的缩写,实际上可用于多个文件/目录。 之所以缩写,是因为C编译器在黎明时不支持超过8个字符的符号。

  • 如果你按照这些说明开始使用kubernetes,你添加一个apt源(德布http://apt.kubernetes.io/ kubernetes-xenial main)并被告知安装软件包“docker-engine”。这个包由kubernetes apt库提供,与Ubuntu (docker.io)提供的包冲突。 Kubernetes仓库中的docker引擎软件包和Ubuntu xenial中的

  • 问题内容: 当我有嵌套在根组件下的组件时,我无法实例化我的应用程序,该组件在其构造函数中使用。 我想知道为什么这种行为是非法的。假设我想在班级中使用该类,而只是在班级中引用该类。这似乎是不可能的。 创建层次结构的正确方法是什么? 谢谢你 PLNKR:http ://plnkr.co/edit/5Z0QMAEyZNUAotZ6r7Yi?p=preview 问题答案: 您可以直接将父组件注入到组件中,