我为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");
}
}
其中后一个参数是执行工作的实际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"
答案 0 :(得分:10)
编写代码是该过程中最简单的部分。您已经声明您的类为AES提供了Cipher实现。这一行:
put("Cipher.AES", "foo.bar.AESCipher");
几乎是完成任务所需的全部内容。另请注意,由于您已在算法级别注册了密码实现,因此将自动为模式和 padding 的所有组合调用您的实现。
话虽如此,编写代码很容易。您正在创建密码,因此在安装和配置JAR之前,您需要对其进行签名。因为这个过程有点牵扯,我不会在这里全部复制,而是会引用你到Oracle Guide on How to implement a Provider。这是完成这项任务的绝佳来源。
如果您按照指南操作但仍有问题,则可能需要下载并安装适用于已安装JDK的JCE Unlimited Strength Policy。
答案 1 :(得分:3)
Java Crypto文档描述了注册Provider
类的机制:
简短版本是:
java.security
配置文件(在Java安装中)或Security.addProvider
或Security.insertProviderAt
。