java 使用sm2公钥加密,私钥解密 代码实现
时间: 2024-11-16 21:28:42 浏览: 1
java(sm2公私钥生成、加签、验签、加密、解密)
在Java中,使用SM2算法进行公钥加密和私钥解密通常涉及`java.security`包下的`KeyPairGenerator`、`Cipher`和`Signature`等类。以下是使用SM2的一个简化示例:
首先,你需要生成一个密钥对:
```java
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.spec.PKCS8EncodedKeySpec;
// 生成SM2密钥对
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("SM2");
keyGen.initialize(256); // SM2默认安全强度为256位
KeyPair keyPair = keyGen.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate(); // 私钥
PublicKey publicKey = keyPair.getPublic(); // 公钥
// 将私钥编码为字节数组(PKCS#8格式)
byte[] privateKeyBytes = privateKey.getEncoded();
```
然后,你可以用公钥加密数据,私钥解密数据:
```java
import javax.crypto.Cipher;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
// 添加BouncyCastle提供者,因为SM2是非标准JCE算法
Security.addProvider(new BouncyCastleProvider());
// 加密
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC"); // 使用SM2的包装算法
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal(somePlainText.getBytes()); // 假设somePlainText是你想要加密的数据
// 解密
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
String decryptedText = new String(decryptedData);
```
注意:这里的例子假设你已经处理了异常,并且正确地添加了BouncyCastle库,因为它包含了SM2的支持。
阅读全文