如何配置并使用 Bouncy Castle 密码包

原文出处:http://gitbook.cn/gitchat/activity/5a41ed6d358c1646ff6bc855 

Bouncycstle 是一款开源的密码包,其包含了大量的密码算法,其支持椭圆曲线密码算法,本文主要说明 Bouncy Castle 如何配置和简单使用。
    1、Bouncy Castle 简介
    2、Bouncy Castle 两种配置方式
    3、Java 进口管制限制解除

Bouncy Castle 是一款轻量级的密码包,包含的许多常用的密码算法,对 Java 安全体系能够起到很好的补充,同时其支持椭圆曲线密码体系。

Bouncy Castle 配置方式有两种:一种是动态安装的方式,一种是静态配置的方式。无论是哪种配置方式,都需要先把 Bouncy Castle 包下载下来(当然也可以使用 Maven 等方式配置使用)。

最新 Bouncy Castle 下载地址请单击这里,需要下载两个文件 bcprov-jdk15on-158.jar 和 bcprov-ext-jdk15on-158.jar。

(一)动态安装的方式

这种方式是在工程中直接使用 Bouncy Castle,对环境的依赖较小。

  • 将 bcprov-jdk15on-158.jar 导入工程
  • 在使用之前动态加入BouncyCastle Provider

example 1:

public class hello {
//动态使用provider
    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    public static void main(String args[]) {
        System.out.println("请输入待加密数据:");
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
          try {
            String date = scan.nextLine();
            KeyGenerator kg =KeyGenerator.getInstance("AES");
            kg.init(256);
            SecretKey secretKey = kg.generateKey();
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] enResult = cipher.doFinal(date.getBytes());
            System.out.println("加密数据:");
            String strEnResult = Base64.toBase64String(enResult);
            System.out.println(strEnResult);    
            } catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchProviderException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (BadPaddingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }
}

 

 

 

 

(二)静态配置的方式

静态配置方式是本地 Java 环境中添加 Bouncy Castle 支持,需要使用到的 jar 包是 bcprov-ext-jdk15on-158.jar。

  • 把 bcprov-ext-jdk15on-158.jar 添加到 java sdk 和 java jre 中。
    • sdk位置→C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext
    • jre位置→C:\Program Files\Java\jre1.8.0_144\lib\ext
  • 修改security配置文件java.security,为了更好的体验,最好将sdk和jre中security文件都进行修改。实际仅仅修改sdk中security文件即可。

  • sdk中security文件:

C:\ProgramFiles\Java\jdk1.8.0_144\jre\lib\security\java.security

  • jre中security文件:

C:\ProgramFiles\Java\jre1.8.0_144\lib\security\java.security

在 security 文件中找到以下部分:

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI

在后面添加

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

注意其中的序号根据自己security文件而定。 检测安装是否成功,可以使用下面的简单程序进行:

 public static void main(String[] args) { 
    Provider provider = Security.getProvider("BC"); 
    System.out.println(provider); 
}

若显示为null表示安装失败,若显示为BC表示安装成功。

(三)Java 进口管制限制解除

由于国外的进出口限制,对Java密码算法体系进行了一些限制,为了解除限制,需要覆盖策略文件。

(1)下载策略文件

  • jdk6→http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
  • jdk7→http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
  • jdk8→http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载的策略文件中需要两个文件:local_policy.jarUS_export_policy.jar

(2)覆盖 sdk 和 jre 中的这两个策略文件

  • sdk 中策略文件位置→C:\Program Files\Java\jdk1.8.0_144\jre\lib\security
  • jre 中策略文件位置→C:\Program Files\Java\jre1.8.0_144\lib\security

(四)测试

策略文件是否生效,可以使用下面的程序检验:

AES 算法没有解除限制之前,AES 算法只支持128位。

public static void main(String[] args) {
        try {
            KeyGenerator kg =  KeyGenerator.getInstance("AES");
            kg.init(256);
            SecretKey secretKey=kg.generateKey(); 
            System.out.println(secretKey.getFormat());
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}

 

若出现 java.security.InvalidKeyException: Illegal key 错误,表示限制没有解除。



 

 

 


 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BouncyCastle是一个在Java语言中使用的开源密码库。它提供了丰富的密码算法和安全性功能,括对称加密算法、非对称加密算法、摘要算法、数字签名、证书和密钥管理等。只需简单的几步就可以下载和使用BouncyCastle。 首先,您需要在官方网站上找到BouncyCastle的下载页面。在网站上,您可以找到与您的Java版本兼容的BouncyCastle版本。下载文件后,您可以将其保存在您选择的目录中。 接下来,您需要将BouncyCastle库添加到您的Java项目中。对于Maven项目,您可以将以下依赖项添加到您的pom.xml文件中: <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.69</version> </dependency> 如果您不使用Maven,您可以手动将下载的BouncyCastle库文件添加到您的项目中。您需要将库文件复制到您的项目的lib目录下,并在项目的构建路径中添加该库。 最后,在您的Java代码中导入所需的BouncyCastle类库,即可使用其中的功能。例如,您可以导入以下语句来使用BouncyCastle提供的对称加密算法: import org.bouncycastle.crypto.BlockCipher; import org.bouncycastle.crypto.engines.AESFastEngine; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.paddings.PKCS7Padding; 通过这些简单的步骤,您可以轻松下载和使用BouncyCastle,以满足您的密码和安全性需求。请记得在使用BouncyCastle时阅读相关文档,并确保遵循最佳的安全实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值