廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle
1.BouncyCastle:
- 第三方提供的一组加密/哈希算法
- 提供JDK没有提供的算法
- RipeMD160哈希算法
- 官方网站
2.如何使用第三方提供的算法
- 2.1 添加第三方jar至classpath
* jar包下载地址

* IDEA:project structure-modules-dependencies-添加,选择Jars or directory,添加jar包即可 - 2.2 注册第三方算法提供方
- 2.3 正常使用JDK提供的接口
public static void main(String[] args) throws Exception{
Security.addProvider(new BouncyCastleProvider());
MessageDigest md = MessageDigest.getInstance("RipeMD160");
String s = "hello world";
md.update(s.getBytes("UTF-8"));
System.out.println(md.digest().length);
System.out.println(String.format("%040x",new BigInteger(1,md.digest())));
}

## 3.代码示例
```#java
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.Security;
public class SplitString {
public static void digest(String hashAlggorithm, byte[] input){
Security.addProvider(new BouncyCastleProvider());
MessageDigest md;
try{
md = MessageDigest.getInstance(hashAlggorithm);
}catch (Exception e){
throw new RuntimeException(e);
}
md.update(input);
System.out.println(md.digest().length);
System.out.println(String.format("%0"+md.digest().length*2+"x",new BigInteger(1,md.digest())));
}
public static void main(String[] args) throws Exception{
String s = "hello 妹子";
byte[] bs = s.getBytes("UTF-8");
digest("MD5",bs);
digest("SHA-1",bs);
digest("RipeMD160",bs);
}
}
<img src="https://img2018.cnblogs.com/blog/1418970/201905/1418970-20190510184836241-2005779009.png" width="500" />
## 4.总结
* BouncyCastle是第三方算法提供商
* 提供了JDK没有的算法
* 使用第三方算法前需要通过Security.addProvide()注册
廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle的更多相关文章
- 廖雪峰Java10加密与安全-3摘要算法-5Hmac
1 比较MD5和HamcMD5 HmacMD5可以看作带安全salt的MD5 import javax.crypto.KeyGenerator; import javax.crypto.Mac; im ...
- 廖雪峰Java10加密与安全-3摘要算法-3SHA-1算法
1.SHA-1算法 SHA-1算法也是一种哈希算法. 输出160 bits/20bytes 由美国国家安全局开发 SHA-0/SHA-1/SHA-256/SHA-512 * SHA-0有问题,已经作废 ...
- 廖雪峰Java10加密与安全-3摘要算法-1MD5
1.摘要算法 1.1 摘要算法(哈希算法/Hash/数字指纹): 计算任意长度数据的摘要(固定长度) 相同的输入数据始终得到相同的输出 不同的输入尽量得到不同的输出 1.2 摘要算法目的: 验证数据和 ...
- 廖雪峰Java10加密与安全-6数字证书-1数字证书
数字证书: 非对称加密算法:对数据进行加密/解密 签名算法:确保数据完整性和抗否认性 摘要算法:确保证书本身没有被篡改
- 廖雪峰Java10加密与安全-5签名算法-1RSA签名算法
1.数字签名 甲在发送加密消息的时候,还要发送自己的签名,而这个签名是用甲的privateKey计算的:而乙要验证这个签名是否是合法的,会用甲的publicKey去验证,如果验证成功,这个消息确实是甲 ...
- 廖雪峰Java10加密与安全-4加密算法-5非对称加密算法
1.非对称加密 非对称加密就是加密和解密使用的不是相同的密钥 方法1: * 加密:用自己的私钥加密,然后发送给对方:encrypt(privateKeyA, message)->s * 解密:对 ...
- 廖雪峰Java10加密与安全-4加密算法-4密钥交换算法
1DH算法 1.1.原根公式:g^i mod P 条件:1<g<P,0<i<P 原根:介于[1, p-1]之间的任意2个数i,j(p为素数,i≠j)的结果不相等,即 g^i m ...
- 廖雪峰Java10加密与安全-4加密算法-2口令加密算法
对称加密key是一个byte数组,如AES256算法的key是一个32字节的数组,普通的加密软件由用户输入加密口令.如果由用户输入口令,进行加密/解密,需要用到PBE算法. 1.PBE:Passwor ...
- 廖雪峰Java10加密与安全-4加密算法-1对称加密算法
1.对称加密算法 加密和解密使用同一个密钥,例如WinRAR. WinRAR在对文件进行打包的时候,可以设置一个密码,在解压的时候需要使用同样的密码才能正确的解压. 加密:encrypt(key,me ...
随机推荐
- [JZOJ3690] 【CF418D】Big Problems for Organizers
题目 题目大意 给你一棵树,然后有一堆询问,每次给出两个点. 问所有点到两个点中最近点的距离的最大值. 正解 本来打了倍增,然后爆了,也懒得调-- 显然可以在两个点之间的路径的中点处割开,一边归一个点 ...
- js对象 事件
对象 创建 var myObject = {};/* 声明对象字面变量*/ 添加值myObject.name="Jener";myObject.age=25; 代码格式 ...
- Windows netstat
{ 显示协议统计信息和当前 TCP/IP 网络连接. NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [int ...
- 网站统计中的PV-UV-IP的定义与区别
--------首先来看看ip.uv和pv的定义---------- PV(访问量):即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次.UV(独立访客):即Unique Visi ...
- sass与less的区别?Stylus又是啥?
现在写样式大家基本上都会用上CSS预处理器,而比较流行的预处理器就是这三位老哥了Less.Sass 和 Stylus: 在这之前,我们先了解一点,sass和scss有什么区别? SCSS 是 Sass ...
- [Codeplus 4月赛]最短路
题意:理论上是给定一张完全图,有边权,在给一些单向边求最短路. 思路: 我充分体会到了我图论的菜. 理论上建图肯定是不能\(n^2\)的,考虑如何优化呢? 将边权异或值二进制替换,最后一遍最短路就行, ...
- Sublime Text 3,有了Anaconda就会如虎添翼
作为Python开发环境的Sublime Text 3,有了Anaconda就会如虎添翼.Anaconda是目前最流行也是最有威力的Python代码提示插件. 操作步骤 1.打开package con ...
- mysql中的字符串截取和替换
-- 替换 replace(字段名,"需要替换的字符","替换的字符") mysql里replace不支持正则匹配 mysql> set @needRep ...
- 海量数据解决思路之Hash算法
海量数据解决思路之Hash算法 一.概述 本文将粗略讲述一下Hash算法的概念特性,里边会结合 分布式系统负载均衡 实例对Hash的一致性做深入探讨.另外,探讨一下Hash算法在海量数据处理方案中 ...
- iOS逆向系列-Cycript
概述 Cycript 是Objective-C++.ES(JavaScript).Java等语法的混合物. 可以用来探索.修改.调试正在运行的Mac\iOS App. 通过Cydia安装Cycript ...