Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java sm4加解密

作者:自然ㄣ之光   发布日期:2025-11-08   浏览:59

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class SM4Util {

    // 密钥长度为16字节
    private static final String KEY = "0123456789abcdef";
    private static final String ALGORITHM = "SM4";

    /**
     * SM4加密
     * @param data 待加密的数据
     * @return 加密后的数据,Base64编码
     */
    public static String encrypt(String data) {
        try {
            SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes("UTF-8"), ALGORITHM);
            Cipher cipher = Cipher.getInstance("SM4/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encryptedData = cipher.doFinal(data.getBytes("UTF-8"));
            return Base64.getEncoder().encodeToString(encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * SM4解密
     * @param encryptedData Base64编码的加密数据
     * @return 解密后的原始数据
     */
    public static String decrypt(String encryptedData) {
        try {
            SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes("UTF-8"), ALGORITHM);
            Cipher cipher = Cipher.getInstance("SM4/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] originalData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
            return new String(originalData, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        String data = "Hello, SM4!";
        System.out.println("Original Data: " + data);

        String encryptedData = encrypt(data);
        System.out.println("Encrypted Data: " + encryptedData);

        String decryptedData = decrypt(encryptedData);
        System.out.println("Decrypted Data: " + decryptedData);
    }
}

代码解释:

  1. 密钥和算法定义KEY 是用于加密和解密的密钥,长度为16字节。ALGORITHM 定义了使用的加密算法为 SM4。
  2. 加密方法 encrypt:将输入的字符串进行 SM4 加密,并使用 Base64 编码返回加密后的结果。
  3. 解密方法 decrypt:将 Base64 编码的加密字符串进行 SM4 解密,返回原始字符串。
  4. 主方法 main:演示了如何使用 encryptdecrypt 方法对数据进行加密和解密。

注意:实际应用中,密钥应该妥善保管,不能硬编码在代码中。

上一篇:java 判断字符串是否为数字

下一篇:java copyonwritearraylist

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站