package com.ruoyi; import com.alibaba.fastjson2.JSONObject; import com.gkhy.exam.institutionalaccess.model.req.ThCertReqDTO; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.ResultConstants; import com.ruoyi.common.exception.BusinessException; import lombok.extern.log4j.Log4j2; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Base64; import java.util.List; import java.util.UUID; @RunWith(SpringRunner.class) @SpringBootTest(classes = RuoYiApplication.class) @ActiveProfiles("dev") @Log4j2 public class TestEncrypt { private static final String key="Bd26jqDDJcdnBocn"; private static final String iv ="oVKRQCjElggSbd8D"; /** * 加密 */ @Test public void text001(){ //加密 List thCertDTOs=new ArrayList<>(); ThCertReqDTO thCertDTO = new ThCertReqDTO(); thCertDTO.setUuid(UUID.randomUUID().toString()); JSONObject jsonObject = new JSONObject(); thCertDTO.setName("王五"); thCertDTO.setIdcard("123456789012345679"); thCertDTO.setBatchUuid("1ef0b81f-dcb7-62a9-ad8f-63e252089bc8"); thCertDTO.setTrainOrgName("1234567890123"); thCertDTO.setCertTime(LocalDateTime.now()); thCertDTO.setCertUrl("https://p26.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/22f10850c5234b5285350743cfa16357"); thCertDTOs.add(thCertDTO); String jsonString = JSONObject.toJSONString(thCertDTOs); String encrypt = encrypt(jsonString); log.info("加密后为:"+encrypt); //解密 String decrypt = ""; try { decrypt = decrypt(encrypt); }catch (Exception e){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } log.info("解密后为:"+decrypt); } @Test public void dec(){ String mes = "nCVoBsCqZnKKYg0NBnsUPgjZpienDHaThN+mIcdcK9IhbjCEZj+ePQJUyLqXWY5+On7OiaCBPbdpx9NbsmR/IbIz0eVhh0BuI0iwbsB5vxkFd0LQHb8GkIM0aqMjwgQLHb1QQKYgne3Nh6/GsOlFveYQJPwiwXfdzsd/zKeWM6gohNBYuXDHAkwTboq/L7TFDVjTNfbvsu8pCVc0txoFmOTkvq5JUCsqBk4RvmM/AZ+yZjTCYkzkufg/sF5CFpbr36nCOzCGGJc1/+wm2qREzzC0HUxinhsXoMm6qJqa7/M3XDjWh/t6SDtxlzBLEgUcyEj2FL7vWLG9oB7EsnExcuY5YpQxJG45qGY6y9kYDF/swQaPsPIpGJhtczamAZuwi/DHuGWJsxqEWyWVEIc80gRek59j0vBMAmn/QVVP3Zu+qtxbJKRY0BAEaNKvIb66"; String decrypt = ""; try { decrypt = decrypt(mes); }catch (Exception e){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } log.info("解密后为:"+decrypt); } private String decrypt(String data) { try { byte[] encryptCode = Base64.getDecoder().decode(data);//先用base64解密 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); byte[] original = cipher.doFinal(encryptCode); String originalString = new String(original); return originalString.trim(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } } private String encrypt(String data){ try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); int blockSize = cipher.getBlockSize(); byte[] dataBytes = data.getBytes(Constants.UTF8); int plaintextLength = dataBytes.length; if (plaintextLength % blockSize != 0) { plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize)); } byte[] plaintext = new byte[plaintextLength]; System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); // CBC模式,需要一个向量iv,可增加加密算法的强度 cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(plaintext); // BASE64做转码。 String aseEncode = Base64.getEncoder().encodeToString(encrypted); return aseEncode; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } } }