package com.linghu.utils; import cn.afocus.crypt.sign.UserSign; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.nio.charset.StandardCharsets; @Component public class OpenCryptUtil { // 加密密钥(从配置文件读取,避免硬编码) // @Value("${crypt.secret}") // 长度需符合算法要求(如AES-256需32位) // private String secret; // 初始化向量(CBC模式需要,可选) // @Value("${app.crypt.iv:1234567890abcdef}") // 16位(AES-128/256通用) // private String iv; // 初始化加密配置(若需要) @PostConstruct public void init() { // 若 open-crypt 需要初始化,可在此处处理 // 例如:CryptoUtils.init(secretKey, iv); } /** * AES加密(假设 open-crypt 默认使用AES-CBC模式) */ public String encrypt(String user) { try { // 调用 open-crypt 的加密方法(根据实际API调整) //user转为 json // String json = JSON.toJSONString(user); String secret ="fY9tX7vX7qH5bN2cD8eM4xD2fH7UL4xM"; JSONObject geoJSON = new JSONObject(); geoJSON.put("name",user); String token = UserSign.gen(geoJSON.toJSONString(),secret.getBytes(StandardCharsets.UTF_8)); return token; // return UserSign.gen(user, "fY9tX7vX7qH5bN2cD8eM4xD2fH7uL4xM".getBytes(StandardCharsets.UTF_8)); } catch (Exception e) { throw new RuntimeException("加密失败:" + e.getMessage(), e); } } /** * AES解密 */ public String decrypt(String token) { try { // 调用 open-crypt 的解密方法 byte[] keyBytes = "fY9tX7vX7qH5bN2cD8eM4xD2fH7uL4xM".getBytes(StandardCharsets.UTF_8); return UserSign.decrypt(token, keyBytes); } catch (Exception e) { throw new RuntimeException("解密失败:" + e.getMessage(), e); } } }