bouncy_bouncycastle - CSDN
精华内容
参与话题
  • BouncyCastle使用

    万次阅读 2017-12-21 18:16:26
    1、为什么要使用BouncyCastle? 我们平常都使用jdk自带的加密包对数据进行加密,加密方式也都是使用的默认的,如果我们想选择别的加密方式,发现会报错,比如如下代码: Cipher cipher = Cipher.getInstance("AES/...

    1、为什么要使用BouncyCastle?

    我们平常都使用jdk自带的加密包对数据进行加密,加密方式也都是使用的默认的,如果我们想选择别的加密方式,发现会报错,比如如下代码:

    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
    cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".getBytes("UTF-8"), "AES"));
    cipher.doFinal("QWEASDZS".getBytes("UTF-8"));
    这时候我们就需要借助BouncyCastle了。


    2、如何使用BouncyCastle?

    2.1、方式一

    (1)去BouncyCastle官网下载provider的包,然后放入$JAVA_HOME\jre\lib\ext目录下;

    (2)修改配置文件$JAVA_HOME\jre\lib\security\java.security,加入一行配置:security.provider.按顺序填数字=org.bouncycastle.jce.provider.BouncyCastleProvider

    (3)代码如下:

    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
    cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".getBytes("UTF-8"), "AES"));
    cipher.doFinal("QWEASDZS".getBytes("UTF-8"));

    2.2、方式二

    (1)在代码中通过maven引入BouncyCastle的包

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.56</version>
    </dependency>

    (2)无需像方式一一样修改配置文件,直接在代码中手动添加provider:

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
    cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".getBytes("UTF-8"), "AES"));
    cipher.doFinal("QWEASDZS".getBytes("UTF-8"));

    3、注意点

    出于某些原因,可能需要去官网下载JCE包,替换掉$JAVA_HOME\jre\lib\security目录下的内容,其次密钥的长度也要注意。



    展开全文
  • Bouncy Castle加密包的分析

    千次阅读 2013-07-18 15:07:24
    “Legion of the Bouncy Castle”组织开发的Bouncy Castle包,是一个纯JAVA实现的加密算法包,发布遵循“MIT X Consortium license”,只要在分发软件时包含该许可的副本,即可以无限制地获得该软件及其文档,包括...
    “Legion of the Bouncy Castle”组织开发的Bouncy Castle包,是一个纯JAVA实现的加密算法包,发布遵循“MIT X Consortium license”,只要在分发软件时包含该许可的副本,即可以无限制地获得该软件及其文档,包括使用、拷贝、修改、合并、出版、分发、再分发,甚至出售软件。
             Bouncy Castle加密包提供的是轻量级的API,这样的设计使得它适合于所有遵循JCE框架的应用环境,包括J2ME。其包含的API大致如下:
            轻量级加密算法的JAVA实现
            一个JCE和JCA的provider
            一个纯JCE 1.2.1的实现
            一个读写ASN.1编码对象的库
            一个版本v1和v3的X.509证书以及PKCS12文件的生成器
            一个S/MIME 和 CMS (PKCS7)的生成/处理器
            一个OCSP (RFC 2560)的生成/处理器
            一个OpenPGP (RFC 2440)的生成/处理器
            一个可供JDK1.4和SUN JCE使用的签名后的jar
            由于 Bouncy Castle Crypto加密包遵循并实现了JCE规范;提供了大量的密码算法,包括最新的椭圆曲线算法、AES等等;集成了对ASN.1和X.509证书以及属性证书的支持,所以本文使用Bouncy Castle Crypto作为提供程序。
           “Legion of the Bouncy Castle”组织及Bouncy Castle Crypto包的官方网站是http://www.bouncycastle.org,可以在此了解加密包开发的最新进展及下载最近的发布版本。
    Bouncy Castle加密实现的API包含在一系列的名字空间中,主要的有:
           org.bouncycastle.asn1                               ASN1编码对象库
           org.bouncycastle.bcpg                            OpenPGP/BCPG的生成/处理
           org.bouncycastle.cms                                 CMS(PKCS7) 的生成/处理
           org.bouncycastle.crypto                             密码术的一些概念类(接口)
           org.bouncycastle.jce                                          JCE的实现
           org.bouncycastle.mail.smime                 S/MIME的生成/处理
           org.bouncycastle.ocsp                        OCSP (RFC 2560)的生成/处理
           org.bouncycastle.openpgp               OpenPGP (RFC 2440)的生成/处理
           org.bouncycastle.openssl                          OpenSSL文件的读取
    其中      org.bouncycastle.jce
                         |
                         +-->       org.bouncycastle.jce.provider
    是所有算
    展开全文
  • Bouncy Castle 密码包实现加解密

    千次阅读 2019-02-02 11:20:13
    Bouncy Castle 介绍 Bouncy Castle API目前包括以下内容: 适用于Java和C#的轻量级加密API。 Java加密扩展(JCE)和Java加密体系结构(JCA)的提供程序。 Java安全套接字扩展(JSSE)的提供程序。 ...

    Bouncy Castle 介绍

    Bouncy Castle API目前包括以下内容:

    • 适用于Java和C#的轻量级加密API。

    • Java加密扩展(JCE)和Java加密体系结构(JCA)的提供程序。

    • Java安全套接字扩展(JSSE)的提供程序。

    • JCE 1.2.1的洁净室实现。

    • 用于读写编码的ASN.1对象的库。

    • 用于TLS(RFC 2246,RFC 4346)和DTLS(RFC 6347 / RFC 4347)的轻量级API。

    • 版本1和版本3 X.509证书,版本2 CRL和PKCS12文件的生成器。

    • 版本2 X.509属性证书的生成器。

    • 用于S / MIME和CMS的生成器/处理器(PKCS7 / RFC 3852)。

    • OCSP的发生器/处理器(RFC 2560)。

    • TSP的生成器/处理器(RFC 3161和RFC 5544)。

    • CMP和CRMF的生成器/处理器(RFC 4210和RFC 4211)。

    • OpenPGP的生成器/处理器(RFC 4880)。

    • 用于扩展访问控制(EAC)的生成器/处理器。

    • 数据验证和认证服务器(DVCS)的生成器/处理器 - RFC 3029。

    • 用于基于DNS的命名实体认证的发生器/处理器(DANE)。

    • 用于RFC 7030安全传输(EST)注册的生成器/处理器。

    • 签名的jar版本适用于JDK 1.4-1.7和Sun JCE。

    轻量级API适用于从J2ME到JDK 1.7的所有内容,C#中还有一个API,为上述大部分内容提供了相同的功能。

     

    如何配置并使用

    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.Sunsecurity.provider.2=sun.security.rsa.SunRsaSignsecurity.provider.3=sun.security.ec.SunECsecurity.provider.4=com.sun.net.ssl.internal.ssl.Providersecurity.provider.5=com.sun.crypto.provider.SunJCEsecurity.provider.6=sun.security.jgss.SunProvidersecurity.provider.7=com.sun.security.sasl.Providersecurity.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRIsecurity.provider.9=sun.security.smartcardio.SunPCSCsecurity.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 错误,表示限制没有解除。

    展开全文
  • BouncyCastle jce安装详解,已测试

    千次阅读 2015-07-07 11:31:50
    安装BouncyCastle JCE应该按照如下步骤: 1)下载提供者 BouncyCastle可以从www.bouncycastle.org下载,下载后请将它解压缩。 (http://www.bouncycastle.org/latest_releases.html 下载crypto-145.zip) 2)将...
    安装BouncyCastle JCE应该按照如下步骤:

    1)下载提供者

    BouncyCastle可以从www.bouncycastle.org下载,下载后请将它解压缩。


    (http://www.bouncycastle.org/latest_releases.html 下载crypto-145.zip)

    2)将JAR文件拷贝到适当位置

    如果想让JCE类可以被所有的JAVA应用程序使用,我们需要把JAR文件安装为一个扩展。BouncyCastle提供者没有用于安装为扩展的 JAR类型的文件,但它容易构建。首先将下载的文件展开到JDK的classes目录下(如,将下载的crypto-145.zip解压后,将其中的各文件放入新建的classes文件夹中),然后运行下面的命令将这些文件打包:

    首先用cd命令进入classes目录

    再c:\...\classes\> jar cvf bouncycastle.jar */.

    这样就在classes文件夹中创建的bouncycastle.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),来判断我们的安装是否成功。程序内容如下:

    import javax.crypto.*;

     

    public class JCEInstallTest{

    public static final String stringToEncrypt="This is a test.";

    public static void main(String[] args) throws Exception{

     

    System.out.print("Attempting to get a Blowfish key...");

    KeyGenerator keyGenerator=KeyGenerator.getInstance("Blowfish");

    keyGenerator.init(128);

    SecretKey key=keyGenerator.generateKey();

    System.out.println("OK");

     

    System.out.println("Attempting to get a Cipher and encrypt...");

    Cipher cipher=Cipher.getInstance("Blowfish/ECB/PKCS5Padding");

    cipher.init(Cipher.ENCRYPT_MODE,key);

     

    byte[] cipherText=cipher.doFinal(stringToEncrypt.getBytes("UTF8"));

    System.out.println("OK");

     

    System.out.println("Test completed successfully.");

    }

    }

    编译:Javac JCEInstallTest.java 无错
    运行:Java JCEInstallTest  出结果
    即证明bouncycastle jce安装配置正确。
    展开全文
  • BOUNCY

    2019-10-24 13:20:33
    BOUNCY
  • Bouncy Castle使用(一)【开始】

    千次阅读 2017-06-05 11:49:40
    保持Bouncy Castle项目进行 随着各种算法的更改,更新,协议中的安全问题,以及不得不为诸如CERT等组织编写供应商声明,保持Bouncy Castle项目的进行正在变成一个全职工作,我们中的几个人现在已经放弃了稳定的工作...
  • bouncy castle .jar包

    2018-12-20 09:37:36
    bouncy castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻... 因为 Bouncy Castle 被设计成轻量级的,所以从 J2SE 1.4 到 J2ME(包括 MIDP)平台,它都可以运行。它是在 MIDP 上运行的唯一完整的密码术包。
  • bouncycastle集合包

    2013-10-18 15:52:37
    在开发项目中踏破千山万水寻找到的多个bouncycastle.jar包,内含四个版本的bouncycastle.jar包互相补充,力求完整,希望对大家有用。
  • Bouncy Castle 1.56 API

    2017-04-16 11:29:48
    Bouncy Castle Cryptography Library(简称BC库)是一个开源且强大的加解密解决方案,适用于JAVA开发ANDROID开发。
  • bouncycastle.jar

    2014-10-29 15:46:59
    最近在重新找Itext的资源,发现bouncycastle的jar包总是缺少东西,在网上下载了很多都不行,最后在一个资源网站上下载的。我这里面封装了两个jar包,应该够用了,tsp和cms的都有,我当时就是缺这两个,要是谁还缺...
  • CreateCert.java package com.secpki.jce.demo; import java.io.ByteArrayInputStream; import java.io.File;...import java.io.FileOutputStream;...import java.io.UnsupportedEncodingException;...import java...
  • ROS 1和ROS 2同步开发发行,目前最新ROS 1的版本号为M,...for Bouncy状态为developed(63)。请等待正式发布。ROS 1和ROS 2同步学习推荐在Ubuntu 16.04中使用ROS 1 Kinetic和ROS 2 Ardent。下面简单介绍一下通过Deb...
  • BouncyCastle.Crypto.dll

    2018-03-02 15:42:38
    BouncyCastle.Crypto.dll,在与Java进行RSA互通加密(签名)时候,借助此动态链接库,可以获得极大帮助,资源搬运工提供了借助此工具实现RSA加密(签名)的技术博客:...
  • 最近项目上正好用到了Bouncy Castle,用于生成数字签名、数字信封,去网上找了很久,都没有找到合适的案例,而Bouncy Castle本身的文档也不多,最有用的就是官网上的Java Doc文档,因为这个问题也困扰了我好几天,...
  • bouncycastle jar包

    2018-12-31 10:39:07
    bouncycastle jar包
  • 引入 API <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.64</version>...
  • 通过BouncyCastle的第三方jar包可以解决这个问题。也可以使用Nginx的第三方模块ngx_http_proxy_module,配置Nginx作为HTTPS代理服务器解决,不过代码需要修改地方较多。 解压压缩包后文件说明: \doc\conf\nginx....
  • BouncyCastle签名认证机制

    千次阅读 2016-04-29 10:55:31
    BouncyCastle签名认证CA机制
  • 从官网(http://www.bouncycastle.org/docs/pkixdocs1.4/)获取的完整页面,然后制作而成的,内容可用,制作工具可用,工具使用方式可百度
  • 如何配置并使用 Bouncy Castle 密码包

    千次阅读 2018-04-12 10:43:55
    Bouncycstle 是一款开源的密码包,其包含了大量的密码算法,其支持椭圆曲线密码算法,本文主要说明 Bouncy Castle 如何配置和简单使用。 Bouncy Castle 简介 Bouncy Castle 两种配置方式 Java 进口管制限制解除 ...
1 2 3 4 5 ... 20
收藏数 8,660
精华内容 3,464
关键字:

bouncy