jar下载链接:
代码:
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.engines.SM4Engine;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.util.encoders.Hex;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Sm4Util {
public static byte[] hexStringToByteArray(String hexString) {
return Hex.decode(hexString);
}
public static String encryptToString(String plainText, String hexKey) {
// 将十六进制密钥转换为字节数组
byte[] keyBytes = hexStringToByteArray(hexKey);
SM4Engine engine = new SM4Engine();
CipherParameters param = new KeyParameter(keyBytes);
engine.init(true, param);
byte[] data = plainText.getBytes(StandardCharsets.UTF_8);
int blockSize = engine.getBlockSize();
int outputLength = data.length + (data.length % blockSize == 0? 0 : blockSize - (data.length % blockSize));
byte[] output = new byte[outputLength];
for (int i = 0; i < data.length; i += blockSize) {
byte[] block = new byte[blockSize];
System.arraycopy(data, i, block, 0, Math.min(data.length - i, blockSize));
byte[] encryptedBlock = new byte[blockSize];
engine.processBlock(block, 0, encryptedBlock, 0);
System.arraycopy(encryptedBlock, 0, output, i, Math.min(encryptedBlock.length, output.length - i));
}
// 使用 Base64 编码加密结果
return Base64.getEncoder().encodeToString(output);
}
public static void main(String[] args) {
String plainText = "Admin@2024"; //待加密内容
String hexKey = "6417849756d1f61073901258fcc7a686"; //32位16进制密钥
String encryptedText = encryptToString(plainText, hexKey);
System.out.println("加密后的文本:" + encryptedText);
}
}