BouncyCastle是一个Java的第三方加密库,提供了Java标准库中没有的算法,例如国密。

Maven配置

添加bcprov-ext-jdk18on的依赖

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-ext-jdk18on</artifactId>
    <version>1.78.1</version>
</dependency>

动态注册

添加进入java.security中

Security.addProvider(new BouncyCastleProvider());

环境验证

读取Security的注册商

for (Provider P : Security.getProviders()) {
    System.out.println(P);
    int count = 1;
    for (Map.Entry<Object, Object> entry : P.entrySet()){
        System.out.println("\t" + entry.getKey());
        count++;   
        if (count > 3) break;
    }
}

最后输出,看得到BC的版本号

BC version 1.7801
    Alg.Alias.Mac.POLY1305RC6
    Signature.SHA3-384WITHRSA
    KeyAgreement.ECMQVWITHSHA384CKDF

算法信息获取

getAlgorithms获取类所支持所有算法名

getInstance获取实例

Security.addProvider(new BouncyCastleProvider());
Security.getAlgorithms("KeyGenerator").forEach(System.out::println);
KeyGenerator.getInstance("SM4", "BC");