2012-04-08 97 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

相關問題