我的Cipher实现的NullPointerException

时间:2014-08-03 13:49:47

标签: java security encryption cryptography

我正在尝试使用Cipher

实施protected constructor of that class
protected Cipher(CipherSpi cipherSpi, Provider provider, String transformation)

但它失败并且NullPointerException在该构造函数中没有任何消息。我提供了所有参数,甚至是我自己的CipherSpi,为什么它会抛出这个异常?

1 个答案:

答案 0 :(得分:2)

问题是在同一个构造函数中执行的安全检查。它不是抛出更精确的异常,而是抛出运行时异常:

if (!JceSecurityManager.INSTANCE.isCallerTrusted()) {
    throw new NullPointerException();
}

代码来自GPL'ed source code of OpenJDK 7,从第250行开始。对于任何Oracle版本的Java SE,它都应该是相同的。

这是安全提供程序在使用之前需要签名的要求的一部分。要签署提供程序,您需要创建代码签名密钥对和从Oracle获得的证书。要了解如何获取,请查看technote: "How to Implement a Provider in the Java Cryptography Architecture"

请注意,许多其他类可以进行扩展,但它们仍然不能成为Provider类中受信任提供程序列表中Security的一部分(即调用{ {1}}永远不会返回您的实现。

请注意,此限制可能不会出现在其他(非官方)Java实现中。