廖雪峰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()注册
原文地址:https://www.cnblogs.com/csj2018/p/10846115.html