如何让Java使用我的安全提供程序?

时间:2012-04-08 03:54:26

标签: java security

我为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"

2 个答案:

答案 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类的机制:

简短版本是:

  1. 将提供程序JAR放在类路径或Java安装的扩展目录中。
  2. 注册提供者:
    • 编辑java.security配置文件(在Java安装中)或
    • 在运行时,请致电Security.addProviderSecurity.insertProviderAt