SM4加密方法,可以通过传递需要加密的明文和密钥来进行调用:

import org.bouncycastle.crypto.engines.SM4Engine; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; import org.bouncycastle.util.encoders.Hex;

import java.nio.charset.StandardCharsets; import java.security.SecureRandom;

public class SM4Encryption {

// 加密方法
public static String encrypt(String plaintext, String key) {
    byte[] iv = new byte[16];
    new SecureRandom().nextBytes(iv);

    byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
    byte[] plaintextBytes = plaintext.getBytes(StandardCharsets.UTF_8);

    CBCBlockCipher cbcBlockCipher = new CBCBlockCipher(new SM4Engine());
    ParametersWithIV parameters = new ParametersWithIV(new KeyParameter(keyBytes), iv);

    cbcBlockCipher.init(true, parameters);

    byte[] ciphertextBytes = new byte[cbcBlockCipher.getOutputSize(plaintextBytes.length)];
    int outputLength = cbcBlockCipher.processBytes(plaintextBytes, 0, plaintextBytes.length, ciphertextBytes, 0);
    try {
        cbcBlockCipher.doFinal(ciphertextBytes, outputLength);
    } catch (Exception e) {
        e.printStackTrace();
    }

    byte[] ivAndCiphertextBytes = new byte[iv.length + ciphertextBytes.length];
    System.arraycopy(iv, 0, ivAndCiphertextBytes, 0, iv.length);
    System.arraycopy(ciphertextBytes, 0, ivAndCiphertextBytes, iv.length, ciphertextBytes.length);

    return Hex.toHexString(ivAndCiphertextBytes);
}

// 调用示例
public static void main(String[] args) {
    String plaintext = "Hello, world!";
    String key = "0123456789abcdef0123456789abcdef";

    String ciphertext = encrypt(plaintext, key);

    System.out.println("Plaintext: " + plaintext);
    System.out.println("Ciphertext: " + ciphertext);
}

} 在这个示例中,我们使用了Bouncy Castle加密库来实现SM4加密。该方法使用了CBC模式,并使用随机生成的IV来增强安全性。我们将IV和密文组合成一个字节数组,并将其转换为十六进制字符串以便于输出和传输。

要使用此方法,请将上面的代码复制到Java文件中,然后在需要调用的地方使用encrypt()方法,并提供要加密的明文和密钥。例如,在main()方法中,我们将Hello, world!作为明文,将0123456789abcdef0123456789abcdef作为密钥,并打印出加密后的密文。