JCE


https://blog.csdn.net/weinichendian/article/details/78549157

安裝BouncyCastle JCE應該按照如下步驟:

1)下載提供者

BouncyCastle可以從www.bouncycastle.org下載,下載后請將它解壓縮。

http://www.bouncycastle.org/latest_releases.html 下載最新版本)直接下載請點擊

2)將JAR文件拷貝到適當位置

如果想讓JCE類可以被所有的JAVA應用程序使用,我們需要把JAR文件安裝為一個擴展。

在Windows中,Java通常安裝在兩個目錄下。一個目錄用於開發,包括所有的JDK工具,另一個僅僅是運行環境。JDK本身通常位於c:/jdk1.6這樣的目錄下,而JDK運行環境通常位於c:/Program files/JavaSoft/JRE1.6這樣的目錄下,它們都有庫的擴展目錄。分別是:c:/jdk1.6.0/jre/lib/ext和c:/Program files/JavaSoft/JRE/1.6/lib/ext,把所要的JAR文件放於對應的目錄下(兩個目錄都要放)。

3)配置安全屬性文件

安全屬性文件java.security位於和/lib/ext平行的另一個目錄/lib/security下,它定義了當前可以使用的加密提供者。如您看到下面的語句:

security.provider.1=sun.security.provider.Sun

security.provider.2=com.sun.rsajca.Provider

它表明本虛擬機有兩個加密提供者以及他們的優先級和訪問時使用的名稱。當需要用到一個加密算法時,虛擬機會依次訪問這里列出的提供者,尋找想要的算法,並按這里的優先級順序使用第一個找到的算法。

我們應該在文件中插入如下行,把新的提供者加入進去(兩個java.security都要加入):

security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider

注意大小寫

當然了,你也可以將前面的加密提供者配置刪除,這樣就不能使用jdk默認的加密提供者了。

4)測試安裝好的程序

我們可以自己寫一個測試程序JCEInstallTest .java(用JCE包的API),來判斷我們的安裝是否成功。程序內容如下:

  1.  
    import javax.crypto.*;
  2.  
     
  3.  
     
  4.  
     
  5.  
    public class JCEInstallTest{
  6.  
     
  7.  
    public static final String stringToEncrypt="This is a test.";
  8.  
     
  9.  
    public static void main(String[] args) throws Exception{
  10.  
     
  11.  
     
  12.  
     
  13.  
    System.out.print( "Attempting to get a Blowfish key...");
  14.  
     
  15.  
    KeyGenerator keyGenerator=KeyGenerator.getInstance( "Blowfish");
  16.  
     
  17.  
    keyGenerator.init( 128);
  18.  
     
  19.  
    SecretKey key=keyGenerator.generateKey();
  20.  
     
  21.  
    System.out.println( "OK");
  22.  
     
  23.  
     
  24.  
     
  25.  
    System.out.println( "Attempting to get a Cipher and encrypt...");
  26.  
     
  27.  
    Cipher cipher=Cipher.getInstance( "Blowfish/ECB/PKCS5Padding");
  28.  
     
  29.  
    cipher.init(Cipher.ENCRYPT_MODE,key);
  30.  
     
  31.  
     
  32.  
     
  33.  
    byte[] cipherText=cipher.doFinal(stringToEncrypt.getBytes("UTF8"));
  34.  
     
  35.  
    System.out.println( "OK");
  36.  
     
  37.  
     
  38.  
     
  39.  
    System.out.println( "Test completed successfully.");
  40.  
     
  41.  
    }
  42.  
     
  43.  
    }



編譯:Javac JCEInstallTest.java 無錯

運行:Java JCEInstallTest  出結果

即證明bouncycastle jce安裝配置正確。

 

 

(一)JCE配置加密算法強度不受限授權的安裝

 

【前言】Java加解密系列,根據實際開發進度,不定期更新

【下載】在Oracle網站上搜索, Unlimited Strength Jurisdiction Policy Files 這個關鍵字,然后按照所安裝的JDK版本選擇對應的授權文件,比如我的是JDK8,就選擇了這個


【安裝】
下載完這個zip包后,里面有兩個jar包和一個readme.txt文件。


按照README.txt里的說明進行安裝。注意區別開發環境用的JRE在JDK里面,運行環境的JRE是單獨的環境。在我的Mac上,JRE是裝在JDK里的,對應路徑是/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre


進入到授權文件安裝的目錄下

/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/security能夠查看到默認是有local_policy.jar 和  US_export_policy.jar的,改個名字保存一下。

 

然后復制壓縮包里的文件到/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/security目錄下,這樣就安裝完成了。

 

【驗證】

可以用下面的程序驗證一下


public static void securityVerify() throws Exception {
byte[] data = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
// create a 64 bit secret key from raw bytes
SecretKey key64 = new SecretKeySpec(
new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 },
"Blowfish");

// create a cipher and attempt to encrypt the data block with our key
Cipher c = Cipher.getInstance("Blowfish/ECB/NoPadding");
c.init(Cipher.ENCRYPT_MODE, key64);
c.doFinal(data);
System.out.println("64 bit test: passed");

// create a 192 bit secret key from raw bytes
SecretKey key192 = new SecretKeySpec(
new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
"Blowfish");

// now try encrypting with the larger key
c.init(Cipher.ENCRYPT_MODE, key192);
c.doFinal(data);

System.out.println("192 bit test: passed");

System.out.println("Tests completed");
}

如果是默認配置,
返回類似


64 bit test: passed
Exception in thread "main" java.lang.SecurityException:
Unsupported keysize or algorithm parameters
at javax.crypto.Cipher.init(...)
at chapter1.SimplePolicyTest.main(SimplePolicyTest.java:38)

如果是替換后,返回


64 bit test: passed
192 bit test: passed
Tests completed

https://blog.csdn.net/arctan90/article/details/68066660


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM