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

Chr*_*ann 16 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");
  }
}
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之前,您需要对其进行签名.因为这个过程有点牵扯,所以我不会在这里全部复制,而是会引用您关于如何实现ProviderOracle指南.这是完成这项任务的绝佳来源.

如果您按照指南操作仍有问题,则可能需要下载并安装适用于已安装JDK 的JCE无限强度策略.


Ste*_*n C 5

Java Crypto 文档描述了注册Provider类的机制:

简短版本是:

  1. 将提供程序 JAR 放在类路径或 Java 安装的扩展目录中。
  2. 注册提供者:
    • 手动将详细信息编辑到java.security配置文件 ( $JAVA_HOME/lib/security/java.security) 中,或
    • 在运行时,调用Security.addProviderSecurity.insertProviderAt