1. BouncyCastle(bcprov)的扩展算法
请说明 BouncyCastle(bcprov)作为 Java 加密 Provider 提供的扩展算法及其工程应用?
- BouncyCastle 的角色(Provider)
- 扩展算法(国密、Argon2、Ed25519 等)
- 注册与使用
BouncyCastle(bcprov)是一个开源的 Java 加密 Provider(org.bouncycastle.jce.provider.BouncyCastleProvider),为 JCA/JCE 提供大量 JDK 标准不直接支持的算法。它扩展的算法包括:国密算法(SM2 非对称、SM3 哈希、SM4 对称)、Argon2/Scrypt 等密码哈希、Ed25519/Ed448 曲线签名、X25519 密钥交换、更多哈希(SHA-3、Keccak、Blake2)、以及一些流密码/ECC 曲线等。工程应用:当业务需要 JDK 未内置的算法(如国密合规、Argon2 强密码哈希、Ed25519 现代签名)时,通过 Security.addProvider(new BouncyCastleProvider()) 注册后,用标准 Cipher/MessageDigest/Signature/KeyPairGenerator API 配合算法名(如 "SM4/ECB/PKCS7Padding"、"SM3"、"Argon2")使用。注意:注册 Provider 后注意优先级(Security.insertProviderAt(..., 1) 可提高优先级);某些算法(如国密)需配合 BouncyCastle 的 KeyPairGenerator/Cipher 提供商实例。BouncyCastle 也提供 PEM 读写、证书生成等高级功能。工程上引入 bcprov-jdk18on 依赖并按需注册。
本题考察 BouncyCastle 扩展算法。核心是"Provider 注册 + 扩展算法(国密/Argon2/Ed25519)"。回答应点出注册与算法使用。
Security.addProvider(new BouncyCastleProvider());
// 使用国密 SM4 对称加密
Cipher cipher = Cipher.getInstance("SM4/ECB/PKCS7Padding", "BC");
// 使用 SM3 哈希
MessageDigest md = MessageDigest.getInstance("SM3", "BC");