2012-04-08 93 views
11

我为AES/CBC/PKCS5Padding编写了自定义安全提供程序。这工作正常。如何让Java使用我的安全提供程序?

什么设置,我需要添加到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" 

回答

7

编写代码的过程中很简单的部分。您已经声明您的类为AES提供了密码实现。此行:

put("Cipher.AES", "foo.bar.AESCipher"); 

几乎所有你需要完成的任务。另外请注意,您的实施将自动调用的模式填充所有组合,因为您已经注册在算法级密码实现。

说了这么多,写代码是比较容易的部分。您正在创建一个密码,因此您需要先签名JAR,然后才能将其安装并配置为提供程序。因为这个过程有些牵扯,所以我不会在这里复制一切,而是我会把你引用到Oracle Guide on How to implement a Provider。这是此任务的极好来源。

如果你遵循的指导,仍然有问题,你可能需要下载和JCE Unlimited Strength Policy适当安装到安装JDK。

+0

所以我甚至不能安装它来测试它的实现? – 2012-04-09 06:18:44

2

Java的加密文档描述的机制用于注册Provider类:

短版本是:

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

我有一个部分(注意上面的'insertProviderAt'通话),但什么是用于注册我的密码支持CBC和PKCS5Padding语法? – 2012-04-08 04:44:24

相关问题