廖雪峰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()注册