菜单

微信小程序账号配置安全接入

access token 加密传输

当客户需要用到 access token 方式的「加密模式」时,需要客户在接口中对 access token 使用工具类进行加密后返回,并且在微信授权管理页面上填入对应的 AESKey。

AESKey 为客户自定义,加密时的 AESKey 与配置页上的 AESKey 需要保持一致,要求为16位字符。

java 工具类示例

@Slf4j
@UtilityClass
public class CryptoUtil {
    private static final String  SENSORSDATA_IV = "ab3456ha89012346";
    private  static final String CHAR_SET = "UTF-8";
    private  static final String AES_CBC_PADDING = "AES/CBC/PKCS5Padding";
    private static final int KEY_LENGTH = 16;
 
    public static String decryptAES(String content,String key) {
        try {
            String aesKey = getAESKey(key);
            SecretKeySpec secretkeySpec = new SecretKeySpec(aesKey.getBytes(CHAR_SET), "AES");
            Cipher cipher = Cipher.getInstance(AES_CBC_PADDING);
            IvParameterSpec ivSpec = new IvParameterSpec(SENSORSDATA_IV.getBytes(CHAR_SET));
            cipher.init(Cipher.DECRYPT_MODE, secretkeySpec,ivSpec);
            byte[] base = Base64.decodeBase64(content.getBytes(CHAR_SET));
            byte[] res = cipher.doFinal(base);
            return new String(res,CHAR_SET);
        } catch (Exception e) {
            log.error("decryptAES Exception:", e);
        }
        return null;
    }
 
 
    public static String encryptAES(String content, String key) {
        try {
            String aesKey = getAESKey(key);
            Cipher cipher = Cipher.getInstance(AES_CBC_PADDING);
            SecretKeySpec secretKey = new SecretKeySpec(aesKey.getBytes(CHAR_SET), "AES");
            cipher.init(1, secretKey, new IvParameterSpec(SENSORSDATA_IV.getBytes(CHAR_SET))); // NOSONAR
            return java.util.Base64.getEncoder().encodeToString(cipher.doFinal(content.getBytes(CHAR_SET)));
        } catch (Exception e) {
            log.error("encryptAES Exception:", e);
        }
        return null;
    }
 
 
    private static String getAESKey(String key) {
        String secretKey;
        if(StringUtils.isEmpty(key)){
            return "";
        }
        int length = key.length();
        if (length >= KEY_LENGTH){
            secretKey = key.substring(0,KEY_LENGTH);
        } else  {
            secretKey = String.format("%16s", key).replace(" ", "0");
        }
        return secretKey;
    }
}
上一个
触发策略服务接入
下一个
行业实践
最近修改: 2026-07-31