安装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. 
       
    
   
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. 
       
    
   
"Attempting to get a Blowfish key...");
14. 
       
    
   
       
   
15. 
       
    
   
"Blowfish");
16. 
       
    
   
       
   
17. 
       
    
   
128);
18. 
       
    
   
       
   
19. 
       
    
   

      SecretKey key=keyGenerator.generateKey(); 
    
20. 
       
    
   
       
   
21. 
       
    
   
"OK");
22. 
       
    
   
       
   
23. 
       
    
   
       
   
24. 
       
    
   
       
   
25. 
       
    
   
"Attempting to get a Cipher and encrypt...");
26. 
       
    
   
       
   
27. 
       
    
   
"Blowfish/ECB/PKCS5Padding");
28. 
       
    
   
       
   
29. 
       
    
   

      cipher.init(Cipher.ENCRYPT_MODE,key); 
    
30. 
       
    
   
       
   
31. 
       
    
   
       
   
32. 
       
    
   
       
   
33. 
       
    
   
byte[] cipherText=cipher.doFinal(stringToEncrypt.getBytes("UTF8"));
34. 
       
    
   
       
   
35. 
       
    
   
"OK");
36. 
       
    
   
       
   
37. 
       
    
   
       
   
38. 
       
    
   
       
   
39. 
       
    
   
"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