使用OpenEuler x86_64 实现Bouncycastle SM4加解密功能
一、安装运行环境
-
安装java和maven
sudo yum install java-17-openjdk sudo yum install maven
安装完成后,你就可以在 OpenEuler 上使用 Maven 来管理 Java 项目了。
二、创建项目工程
-
在项目根目录下创建pom.xml文件用于添加Bouncycastle的依赖项。
vi pom.xml
加入内容:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>MySM4Project</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.77</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15to18</artifactId>
<version>1.77</version>
</dependency>
</dependencies>
</project>
- 将源代码放入src/main/java/BC目录下。
sm4_demo.java:
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.Security;
public class sm4_demo {
static {
Security.addProvider(new BouncyCastleProvider());
}
public static void main(String[] args) {
String plaintext = "yy_SM4_demo:hello";
String key = SM4Util.generateRandomKey();
// 加密
String ciphertext = new SM4Util().encrypt(plaintext, key);
// 输出加密结果
System.out.println("CipherText: " + ciphertext);
// 解密
String decryptedText = new SM4Util().decrypt(ciphertext, key);
// 输出解密结果
System.out.println("PlainText: " + decryptedText);
}
}
SM4Util.java:
import org.bouncycastle.crypto.engines.SM4Engine;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.util.encoders.Hex;
import org.bouncycastle.util.encoders.Base64;
import java.security.SecureRandom;
public class SM4Util {
// 生成随机密钥的方法
public static String generateRandomKey() {
byte[] keyBytes = new byte[16]; // 128位密钥
SecureRandom random = new SecureRandom();
random.nextBytes(keyBytes);
return Base64.toBase64String(keyBytes);
}
public String encrypt(String data, String key) {
byte[] keyBytes = Base64.decode(key);
byte[] in = data.getBytes();
byte[] out = new byte[in.length];
// 初始化SM4引擎
SM4Engine engine = new SM4Engine();
engine.init(true, new KeyParameter(keyBytes));
// 加密数据
engine.processBlock(in, 0, out, 0);
// 返回加密后的密文
return Hex.toHexString(out);
}
public String decrypt(String cipherText, String key) {
byte[] keyBytes = Base64.decode(key);
byte[] in = Hex.decode(cipherText);
byte[] out = new byte[in.length];
// 初始化SM4引擎
SM4Engine engine = new SM4Engine();
engine.init(false, new KeyParameter(keyBytes));
// 解密数据
engine.processBlock(in, 0, out, 0);
// 返回解密后的明文
return new String(out);
}
}
-
创建lib文件夹,并将从官网上下载的bcprov-ext-jdk15to18-177.jar和bcprov-jdk15to18-177.jar放入其中。
Bouncycastle官网:https://www.bouncycastle.org/latest_releases.html
三、编译和运行
- 编译
使用mvn系列命令进行编译:
mvn clean install
- 运行
使用命令运行:
java -cp target/classes:target/MySM3Project-1.0-SNAPSHOT.jar:lib/* sm3_demo
- 运行结果