| | |
| | | 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 cn.hutool.core.codec.Base64; |
| | | import cn.hutool.core.util.HexUtil; |
| | | import cn.hutool.crypto.asymmetric.SM2; |
| | | |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Base64; |
| | | |
| | | |
| | | public class AuthUtil { |
| | | |
| | |
| | | * 6、组装得到token:{B}.{A}.{F} |
| | | * @return |
| | | */ |
| | | @SneakyThrows |
| | | public static String getToken() { |
| | | String privateKey = "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3"; |
| | | String publicKey = "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F"; |
| | | SM2 sm2 = new SM2(privateKey, publicKey); |
| | | sm2.usePlainEncoding(); |
| | | //SM2 token生成 |
| | | String certCode = "UAV32_WHR4E3UAJZTE3KE5IZFDGL7CBU"; |
| | | 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; |
| | | //拼接待签名数据 |
| | | String needSignData = certCode + timestamp; |
| | | byte[] needSignDataByte = needSignData.getBytes(StandardCharsets.UTF_8); |
| | | //签名 |
| | | byte[] signData = sm2.sign(needSignDataByte); |
| | | String signDataHex = HexUtil.encodeHexStr(signData); |
| | | // System.out.println("sign Hex:" + signDataHex); |
| | | String signDataBase64 = Base64.encode(signData); |
| | | // System.out.println("sign Base64:" + signDataBase64); |
| | | //生成token |
| | | String token = certCode + "." + timestamp + "." + signDataBase64; |
| | | // System.out.println("token:" + token); |
| | | //SM2 token验证 |
| | | boolean rst1 = sm2.verify(needSignDataByte, signData); |
| | | // System.out.println("verify result:" + rst1); |
| | | boolean rst2 = sm2.verify(needSignDataByte, HexUtil.decodeHex(signDataHex)); |
| | | // System.out.println("verify result:" + rst2); |
| | | boolean rst3 = sm2.verify(needSignDataByte, Base64.decode(signDataBase64)); |
| | | // System.out.println("verify result:" + rst3); |
| | | return certCode + "." + timestamp + "." + signDataBase64; |
| | | } |
| | | |
| | | public static void main(String[] args) { |