package com.dji.sample.droneairport.utils; import com.dji.sample.droneairport.utils.SM2.ModeTypeEnum; import com.dji.sample.droneairport.utils.SM2.Utils; import com.dji.sample.territory.utils.SM2SignUtil; import com.dji.sample.territory.utils.jym.SM2SignVO; import com.dji.sample.territory.utils.jym.SM2SignVerUtils; import com.dji.sample.territory.utils.jym.Util; import lombok.SneakyThrows; import java.nio.charset.StandardCharsets; import java.util.Base64; public class AuthUtil { /** * 国土调查云获取token * 1、获取当前时间的时间的毫秒时间戳A * 2、用调用方的数字证书B和A进行字符串顺序拼接得到字符串C * 3、获取字符串C的UTF-8字节数组D * 4、采用调用方的私钥,使用SM2签名算法对字节数组D进行签名得到字节数组E * 5、对字节数组E进行base64编码得到字符串F * 6、组装得到token:{B}.{A}.{F} * @return */ @SneakyThrows public static String getToken() { long timestamp = System.currentTimeMillis(); String certificateB = "5DED9AC421AC4FD8B03C5E7236A9A201"; // 示例证书信息 String C = certificateB + timestamp; byte[] D = C.getBytes(StandardCharsets.UTF_8); SM2SignVO sm2signv0 = SM2SignVerUtils.Sign2SM2(Util.hexStringToBytes("23E57DA1E4AB865CCBC325B668762207DEF74345B782237808AE0BABDF26734D"), D); byte[] E = sm2signv0.getSm2_signForHard().getBytes(); String F = Base64.getEncoder().encodeToString(E); return certificateB + "." + timestamp + "." + F; } public static void main(String[] args) { System.out.println("token:" + getToken()); } }