SM2加密解密 java
时间: 2023-11-20 15:55:19 浏览: 59
以下是使用Java实现SM2加密解密的示例代码:
```java
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.engines.SM2Engine;
import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
import org.bouncycastle.crypto.params.*;
import org.bouncycastle.crypto.signers.SM2Signer;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
import java.security.Security;
public class SM2Demo {
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
// 生成密钥对
ECKeyPairGenerator keyPairGenerator = new ECKeyPairGenerator();
keyPairGenerator.init(new SM2KeyGenerationParameters(new SecureRandom()));
AsymmetricCipherKeyPair keyPair = keyPairGenerator.generateKeyPair();
// 加密
SM2Engine engine = new SM2Engine();
CipherParameters param = new ParametersWithRandom(keyPair.getPublic(), new SecureRandom());
engine.init(true, param);
byte[] cipherText = engine.processBlock("Hello, SM2!".getBytes(), 0, "Hello, SM2!".getBytes().length);
// 解密
engine.init(false, keyPair.getPrivate());
byte[] plainText = engine.processBlock(cipherText, 0, cipherText.length);
System.out.println("Cipher text: " + Hex.toHexString(cipherText));
System.out.println("Plain text: " + new String(plainText));
}
}
```
上述代码中,我们使用了Bouncy Castle作为SM2算法的实现库。首先,我们需要生成SM2密钥对,然后使用公钥加密明文,使用私钥解密密文。在加密和解密过程中,我们都使用了SM2Engine类来进行加解密操作。