我为AES/CBC/PKCS5Padding编写了一个自定义安全提供程序.这很好.
我需要添加哪些设置Provider才能让Java将其识别为上述算法的有效提供程序?我已经有了
public class FooBarProvider extends Provider {
public FooBarProvider() {
super("FooBar", 1.0, "Provider for AES.");
put("Cipher.AES", "foo.bar.AESCipher");
}
}
Run Code Online (Sandbox Code Playgroud)
后一个论点是实际CipherSpi的工作.我在哪里注册它支持CBC和PKCS5Padding的事实?目前要求相关Cipher不会返回我的班级实例:
Security.insertProviderAt(new FooBarProvider(), 1);
Cipher cip = Cipher.getInstance("AES/CBC/PKCS5Padding");
System.out.println(cip.getProvider()); //prints "SunJCE version 1.7"
Run Code Online (Sandbox Code Playgroud)
Per*_*ion 10
编写代码是该过程中最简单的部分.您已经声明您的类为AES提供了Cipher实现.这一行:
put("Cipher.AES", "foo.bar.AESCipher");
Run Code Online (Sandbox Code Playgroud)
几乎是完成任务所需的一切.另请注意,由于您已在算法级别注册了密码实现,因此将自动为模式和填充的所有组合调用您的实现.
话虽如此,编写代码很容易.您正在创建密码,因此在安装和配置JAR之前,您需要对其进行签名.因为这个过程有点牵扯,所以我不会在这里全部复制,而是会引用您关于如何实现Provider的Oracle指南.这是完成这项任务的绝佳来源.
如果您按照指南操作仍有问题,则可能需要下载并安装适用于已安装JDK 的JCE无限强度策略.
Java Crypto 文档描述了注册Provider类的机制:
简短版本是:
java.security配置文件 ( $JAVA_HOME/lib/security/java.security) 中,或Security.addProvider或Security.insertProviderAt。