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的更多相关文章

  1. 廖雪峰Java10加密与安全-3摘要算法-5Hmac

    1 比较MD5和HamcMD5 HmacMD5可以看作带安全salt的MD5 import javax.crypto.KeyGenerator; import javax.crypto.Mac; im ...

  2. 廖雪峰Java10加密与安全-3摘要算法-3SHA-1算法

    1.SHA-1算法 SHA-1算法也是一种哈希算法. 输出160 bits/20bytes 由美国国家安全局开发 SHA-0/SHA-1/SHA-256/SHA-512 * SHA-0有问题,已经作废 ...

  3. 廖雪峰Java10加密与安全-3摘要算法-1MD5

    1.摘要算法 1.1 摘要算法(哈希算法/Hash/数字指纹): 计算任意长度数据的摘要(固定长度) 相同的输入数据始终得到相同的输出 不同的输入尽量得到不同的输出 1.2 摘要算法目的: 验证数据和 ...

  4. 廖雪峰Java10加密与安全-6数字证书-1数字证书

    数字证书: 非对称加密算法:对数据进行加密/解密 签名算法:确保数据完整性和抗否认性 摘要算法:确保证书本身没有被篡改

  5. 廖雪峰Java10加密与安全-5签名算法-1RSA签名算法

    1.数字签名 甲在发送加密消息的时候,还要发送自己的签名,而这个签名是用甲的privateKey计算的:而乙要验证这个签名是否是合法的,会用甲的publicKey去验证,如果验证成功,这个消息确实是甲 ...

  6. 廖雪峰Java10加密与安全-4加密算法-5非对称加密算法

    1.非对称加密 非对称加密就是加密和解密使用的不是相同的密钥 方法1: * 加密:用自己的私钥加密,然后发送给对方:encrypt(privateKeyA, message)->s * 解密:对 ...

  7. 廖雪峰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 ...

  8. 廖雪峰Java10加密与安全-4加密算法-2口令加密算法

    对称加密key是一个byte数组,如AES256算法的key是一个32字节的数组,普通的加密软件由用户输入加密口令.如果由用户输入口令,进行加密/解密,需要用到PBE算法. 1.PBE:Passwor ...

  9. 廖雪峰Java10加密与安全-4加密算法-1对称加密算法

    1.对称加密算法 加密和解密使用同一个密钥,例如WinRAR. WinRAR在对文件进行打包的时候,可以设置一个密码,在解压的时候需要使用同样的密码才能正确的解压. 加密:encrypt(key,me ...

随机推荐

  1. keepalived中vrrp_script,track_script,notify的使用方法

    keepalived中vrrp_script,track_script,notify的使用方法转自:https://blog.51cto.com/liuzhengwei521/1929589 可以在k ...

  2. 引用数据类型 Scanner Random

    Scanner类 数据类型  变量名  =  new 数据类型(); 每种引用数据类型都有其功能,我们可以调用该类型实例的功能. 变量名.方法名(); Scanner类是引用数据类型的一种,我们可以使 ...

  3. Windows 隐藏控制台

    #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"& ...

  4. 一些关于Hibernate延迟加载的误区

    最近面试别人,正好出的笔试题中有道关于Hibernate延迟加载的问题,聊天过程中发现很多人对Hibernate的延迟加载有些理解误区,写 些东东在这里,希望对大家有所帮助. 首先是第一个误区:延迟加 ...

  5. Python编码decode和encode

    常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换;GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码ASCII编码:是对 ...

  6. 第三周课堂笔记4thand5th

    循环打印 #计算字典中的键值对的个数 print(len(a)) #获取字典中键的列表 print(a.keys()) #获取字典中值的列表 print(a.values()) #获取字典中键值对的个 ...

  7. <每日一题>题目12:列表解析及zip、dict函数的简单应用

    ''' 分析: 1.列表解析:迭代机制的一种应用 语法: [expression for iter_val in iterable] [expression for iter_val in itera ...

  8. mvc中在cshtml页面中如何访问静态页面.html

    把静态页面放到@Url.Content();中,如href="@Url.Content("a.html")"

  9. wpf问题集锦

    一.今天用vs2013新建wpf程序,项目名称命名为MainWindow,一启动就出现错误:类型“MainWindow.MainWindow”中不存在类型名称"App".博主顿时很 ...

  10. 操作RDS数据库