专栏名称: GitChat技术杂谈
GitChat是新时代的学习工具。
目录
相关文章推荐
OSC开源社区  ·  龙芯处理器成功运行DeepSeek大模型 ·  昨天  
程序员的那些事  ·  国企也中招!官网被挂上“码农的钱你也敢吞,* ... ·  2 天前  
程序员小灰  ·  DeepSeek让我的朋友一夜暴富! ·  4 天前  
程序员的那些事  ·  突发!o3-mini ... ·  5 天前  
OSC开源社区  ·  2024年中国开源模型:崛起与变革 ·  5 天前  
51好读  ›  专栏  ›  GitChat技术杂谈

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

GitChat技术杂谈  · 公众号  · 程序员  · 2018-01-24 07:15

正文


本文来自作者 秋山人家 GitChat 上分享 「如何配置并使用 Bouncy Castle 密码包」, 阅读原文 查看交流实录。

文末高能

编辑 | 哈比

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

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

最新 Bouncy Castle 下载地址请访问:http://www.bouncycastle.org/latest_releases.html,需要下载两个文件 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







请到「今天看啥」查看全文