廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle

1.BouncyCastle:

  • 第三方提供的一组加密/哈希算法
  • 提供JDK没有提供的算法
  • RipeMD160哈希算法
  • 官方网站

2.如何使用第三方提供的算法

  • 2.1 添加第三方jar至classpath
    * jar包下载地址
    廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle
    * 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())));
    }

廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle

3.代码示例

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);
    }
}

廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle

4.总结

  • BouncyCastle是第三方算法提供商
  • 提供了JDK没有的算法
  • 使用第三方算法前需要通过Security.addProvide()注册
上一篇:ZooKeeper 未授权访问


下一篇:javascript – 在ui中执行某些操作之前,AngularJS范围不会更新,例如单击带有函数的对象