BouncyCastle使用

我们平常都使用jdk自带的加密包对数据进行加密,加密方式也都是使用的默认的,如果我们想选择别的加密方式,发现会报错,比如如下代码:

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".getBytes("UTF-8"), "AES"));
cipher.doFinal("QWEASDZS".getBytes("UTF-8"));

这时候我们就需要借助BouncyCastle了。

(1)在代码中通过maven引入BouncyCastle的包

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.56</version>
</dependency>
(2)在代码中手动添加provider:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".getBytes("UTF-8"), "AES"));
cipher.doFinal("QWEASDZS".getBytes("UTF-8"));

openssl smime -sign -signer cert.crt -inkey private.key -out file.xml.cms -in file.xml -outform PEM -nodetach

------------------------------------------------------------------------------------------------------------------

https://codingdict.com/questions/118103

https://blog.csdn.net/u011024652/article/details/53520728

https://codingdict.com/questions/111964

https://www.manongdao.com/article-1007555.html

https://www.javaroad.cn/questions/155262

https://www.bouncycastle.org/java.html ***

https://www.bouncycastle.org/resources.html ***

### 如何使用 BouncyCastle Java 加密库 #### 注册 Bouncy Castle 安全提供者 为了在应用程序中利用 Bouncy Castle 提供的安全功能,必须先将其注册为 Java 的安全提供者。这一步骤通过向 `Security` 类添加一个新的实例来完成。 ```java import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.security.Security; public class RegisterBouncyCastle { public static void register() { Security.addProvider(new BouncyCastleProvider()); } } ``` 这段代码展示了如何将 Bouncy Castle Provider 添加到现有的 Java 安全环境中[^1]。 #### 对称加密示例 下面是一个简单的对称加密例子,这里选择了 AES 算法来进行说明: ```java import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class SymmetricEncryptionExample { private static final String ALGORITHM = "AES"; private static final int KEY_SIZE = 128; public static SecretKey generateKey() throws Exception { KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM, "BC"); keyGen.init(KEY_SIZE); return keyGen.generateKey(); } public static byte[] encrypt(String plainText, SecretKey secretKey) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(new byte[16])); return cipher.doFinal(plainText.getBytes()); } public static String decrypt(byte[] encryptedData, SecretKey secretKey) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(new byte[16])); return new String(cipher.doFinal(encryptedData)); } } ``` 此代码片段实现了基本的 AES 加密解密操作,并指定了填充模式 PKCS7 Padding 来确保数据长度符合要求。 #### 支持的标准与协议 Bouncy Castle 库支持多个重要的加密标准和协议,包括但不限于 PKIX、CMS、EAC、OpenPGP 及 S/MIME 等。这些特性使得该库非常适合用于构建需要强安全性保障的应用程序和服务[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值