BouncyCastle - Java加密与安全

博客围绕BouncyCastle展开,主要讲述其在Java加密与安全方面的应用,虽未给出具体内容,但可推测涉及相关加密算法、安全机制等信息技术领域关键内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BouncyCastle

什么是BouncyCastle?

1. 它是第三方提供的一组加密提供方

2. 他提供了JDK没有提供的算法,例如RipeMD160哈希算法

3. 他的官方网站是: http://www.bouncycastle.org/

我们如何使用第三方提供的算法呢?

例如我们要使用RipeMD160算法


1. 首先我们要把第三方jar包添加到classpath,然后我们通过Security.addProvider,

提供BouncyCastleProvider这个实例,这样我们就可以注册一个第三方提供方,紧接着我们就可以

使用JDK提供的使用接口,来使用各种算法,例如我们只要使用MessageDigest.getInstance,然后传入

RipeMD160,我们就可以使用BouncyCastle提供的摘要算法
package com.learn.securl;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class DigestDemo {
	
	public static byte[] digest(String hashAlgorithm, byte[] input) {
		MessageDigest md = null;
		
		try {
			md = MessageDigest.getInstance(hashAlgorithm);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		md.update(input);
		return md.digest();
	}
	
    public static String bytesToHexString(byte... src) {
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }
	
    /**
     * MD5,SHA1,SHA-256都是JDK自带的摘要算法
     * 而RipeMD160不是JDK自带的
     * 所以他会报错
     * NoSuchAlgorithmException: RipeMD160 MessageDigest not available
     * BouncyCastle他提供了RipeMD160的算法
     * 如果我们要使用BouncyCastle的话
     * 首先我们要把BouncyCastle的jar包bcprov-jdk15on-1.55.jar放到classpath中
     * 	<dependency>
	 *	    <groupId>org.bouncycastle</groupId>
	 *	    <artifactId>bcprov-jdk15on</artifactId>
	 *	    <version>1.56</version>
	 *	</dependency>
     * @param args
     * @throws Exception
     */
	public static void main(String[] args) throws Exception {
		/**
		 * 把BouncyCastle作为Provider添加到java.security
		 * 我们在Security.addProvider中把BouncyCastle添加为Provider
		 * 20: 31a78b8a9aa93f70dd225e52eaaf67d942e44ce9
		 * 这个时候我们就可以看到RipeMD160摘要可以被正确的计算出来
		 */
		Security.addProvider(new BouncyCastleProvider());
		String s = "Java摘要算法测试";
		byte[] input = s.getBytes("UTF-8");
		byte[] r1 = digest("MD5",input);
		System.out.println(r1.length + ": " + bytesToHexString(r1));
		byte[] r2 = digest("SHA-1",input);
		System.out.println(r2.length + ": " + bytesToHexString(r2));
		byte[] r3 = digest("SHA-256",input);
		System.out.println(r3.length + ": " + bytesToHexString(r3));
		byte[] r4 = digest("RipeMD160",input);
		System.out.println(r4.length + ": " + bytesToHexString(r4));
	}	
}

最后我们总结一下:

1. BouncyCastle是第三方算法提供商

2. 他提供了JDK没有提供的算法

3. 我们在使用第三方算法前,需要通过Security.setProvider进行注册

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值