BouncyCastle什么是BouncyCastle?1. 它是第三方提供的一组加密提供方2. 他提供了JDK没有提供的算法,例如RipeMD160哈希算法3. 他的官方网站是: http://www.bouncycastle.org/

我们如何使用第三方提供的算法呢?例如我们要使用RipeMD160算法1. 首先我们要把第三方jar包添加到classpath,然后我们通过Security.addProvider,提供BouncyCastleProvider这个实例,这样我们就可以注册一个第三方提供方,紧接着我们就可以使用JDK提供的使用接口,来使用各种算法,例如我们只要使用MessageDigest.getInstance,然后传入RipeMD160,我们就可以使用BouncyCastle提供的摘要算法
package com.learn.securl;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;import org.bouncycastle.jce.provider.BouncyCastleProvider;public class DigestDemo {public static byte[] digest(String hashAlgorithm, byte[] input) {MessageDigest md = null;try {md = MessageDigest.getInstance(hashAlgorithm);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}md.update(input);return md.digest();}public static String bytesToHexString(byte... src) {StringBuilder stringBuilder = new StringBuilder();if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();}/*** MD5,SHA1,SHA-256都是JDK自带的摘要算法* 而RipeMD160不是JDK自带的* 所以他会报错* NoSuchAlgorithmException: RipeMD160 MessageDigest not available* BouncyCastle他提供了RipeMD160的算法* 如果我们要使用BouncyCastle的话* 首先我们要把BouncyCastle的jar包bcprov-jdk15on-1.55.jar放到classpath中*  <dependency>*     <groupId>org.bouncycastle</groupId>*        <artifactId>bcprov-jdk15on</artifactId>*        <version>1.56</version>*    </dependency>* @param args* @throws Exception*/public static void main(String[] args) throws Exception {/*** 把BouncyCastle作为Provider添加到java.security* 我们在Security.addProvider中把BouncyCastle添加为Provider* 20: 31a78b8a9aa93f70dd225e52eaaf67d942e44ce9* 这个时候我们就可以看到RipeMD160摘要可以被正确的计算出来*/Security.addProvider(new BouncyCastleProvider());String s = "Java摘要算法测试";byte[] input = s.getBytes("UTF-8");byte[] r1 = digest("MD5",input);System.out.println(r1.length + ": " + bytesToHexString(r1));byte[] r2 = digest("SHA-1",input);System.out.println(r2.length + ": " + bytesToHexString(r2));byte[] r3 = digest("SHA-256",input);System.out.println(r3.length + ": " + bytesToHexString(r3));byte[] r4 = digest("RipeMD160",input);System.out.println(r4.length + ": " + bytesToHexString(r4));}
}

最后我们总结一下:1. BouncyCastle是第三方算法提供商2. 他提供了JDK没有提供的算法3. 我们在使用第三方算法前,需要通过Security.setProvider进行注册

BouncyCastle - Java加密与安全相关推荐

  1. java加密框架_Java加密解密(一)Java加密体系基础

    标签: Java加密解密(一)Java加密体系基础 1. JCA(Java Cryptography Architecture) 提供基本的加密框架,如证书,数字签名,消息摘要和密钥对生成器.其主要实 ...

  2. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao) 2.简单的例子 ...

  3. Java加密与解密笔记(三) 非对称加密

    非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...

  4. Java 加密 AES 对称加密算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...

  5. Java加密解密入门

    一 概述 Java加密解密概述 Java安全领域分为四个部分:JCA-Java加密体系结构:JCE-Java加密扩展包:JSSE-Java安全套接字扩展包:JAAS-Java鉴别与安全服务. JCA提 ...

  6. java中解密技术是什么_详解Java 加密解密技术的分类和归纳

    这篇文章主要介绍了Java加密解密基础分类方法汇总的相关资料,需要的朋友可以参考下 Java 加密解密基础: 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信 ...

  7. java 加密解密编程,java 加密解密容易实现

    当前位置:我的异常网» 编程 » java 加密解密容易实现 java 加密解密容易实现 www.myexceptions.net  网友分享于:2013-10-27  浏览:3次 java 加密解密 ...

  8. 安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》

    <Java加密与解密的艺术>中文 PDF版 :https://www.jb51.net/books/65048.html 1. 密码学应用 :https://www.bilibili.co ...

  9. Java 加密解密之对称加密算法PBE

    JAVA  加密解密系列 Java 加密解密基础 Java byte数组与十六进制字符串互转 Java BASE64加密解密 Java 加密解密之消息摘要算法(MD5 SHA MAC) Java 加密 ...

最新文章

  1. STC89C52RC片内资源介绍
  2. 为了不再颓废,不再堕落......转操作系统为ubuntu,转语言环境为java...
  3. 垃圾收集 java_关于Java垃圾收集
  4. 队列/优先队列的应用问题
  5. ubuntu系统DD对拷还原报废笔记本
  6. 【英语之夜】遇见--Peter
  7. jwt如何防止token被窃取_如何使用 NodeJS 实现 JWT 原理
  8. 【转】SQLServer 行列互换
  9. jad反编译成java,Jad java反编译指令
  10. H3CSE园区-NTP
  11. 3ds Max: Substance to V-Ray Workflows 3ds Max教程:从Substance到V-Ray工作流程 Lynda课程中文字幕
  12. 自己总结的ITTO规律-PMP
  13. minus用法c语言,Minus-C 一个最小化的C语言规范
  14. 【STM32】OOK软解码
  15. 我们期待自己成为一个优秀的软件模型设计者
  16. c++primer plus 6 读书笔记 第四章 复合类型
  17. 微信小程序实现瀑布流,如何实现!
  18. Py2neo安装(未完待续)
  19. Python:1-3、注释
  20. 鸿蒙是另一种安卓吗,鸿蒙不是另一个安卓或者iOS!鸿蒙2.0上线倒计时

热门文章

  1. zabbix—自动发现端口并监控
  2. 机器学习算法中的概率方法
  3. 创建故障转移群集,LiveMigration系列之六
  4. TODO:Go语言goroutine和channel使用
  5. ED2k Resource
  6. 如何集成Spring和Struts(实例说明)
  7. Windows Mobile 5
  8. FCoE 不是×××
  9. Spring Boot CMI 使用笔记
  10. centos7是php多少,centos7怎么安装php