123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- package nckd.fi.all.common.utils;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import kd.bos.script.annotations.KSObject;
- import org.apache.commons.codec.digest.DigestUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.util.Base64Utils;
- import javax.crypto.Cipher;
- import javax.crypto.KeyGenerator;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.SecretKeySpec;
- import java.nio.charset.Charset;
- import java.nio.charset.StandardCharsets;
- /**
- * @author bi lei
- * @date 2020/12/18 10:35
- */
- @KSObject
- public class CodecUtil {
- private static final Logger logger = LoggerFactory.getLogger(CodecUtil.class);
- private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
- /**
- * AES加密密钥
- */
- public static final byte[] AES_SECRET_KEY_BYTES = Base64Utils.decodeFromString("KSKiOQgLKcdaCZLbnkgG7V==");
- /**
- * SHA1加密密钥(用于增加加密的复杂度)
- */
- public static final String SHA1_SECRET_KEY = "uErQ0KY3J2CwttyuaeEYR2==";
- /**
- * 对业务数据进行加密,用AES加密再用Base64编码
- *
- * @param data 待加密数据
- * @return
- */
- public static String aesEncrypt(String data) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] dataBytes = data.getBytes("UTF-8");
- cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- return Base64Utils.encodeToString(result);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesEncrypt失败:data={},异常:{}", data, e);
- }
- return null;
- }
- /**
- * 对业务数据进行加密,用AES解密
- *
- * @param encryptedDataBase64
- * @return
- */
- public static String aesDecrypt(String encryptedDataBase64) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] dataBytes = Base64Utils.decodeFromString(encryptedDataBase64);
- cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- return new String(result);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesDecrypt失败:data={},异常:{}", encryptedDataBase64, e);
- }
- return null;
- }
- /**
- * 对业务数据进行加密,用AES加密再用Base64编码
- *
- * @param data 待加密数据
- * @return
- */
- public static String aesEncrypt(String data,String chartsetName) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- if(chartsetName == null || chartsetName.length()==0){
- chartsetName = "UTF-8";
- }
- byte[] dataBytes = data.getBytes(chartsetName);
- cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- return Base64Utils.encodeToString(result);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesEncrypt失败:data={},异常:{}", data, e);
- }
- return null;
- }
- /**
- * 对业务数据进行加密,用AES解密
- *
- * @param encryptedDataBase64
- * @return
- */
- public static String aesDecryp(String encryptedDataBase64,String chartsetName) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] dataBytes = Base64Utils.decodeFromString(encryptedDataBase64);
- cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- if(chartsetName == null || chartsetName.length()==0){
- chartsetName = "UTF-8";
- }
- return new String(result,chartsetName);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesDecrypt失败:data={},异常:{}", encryptedDataBase64, e);
- }
- return null;
- }
- /**
- * 对业务数据进行加密,用AES解密
- *
- * @param encryptedDataBase64
- * @return
- */
- public static String aesDecrypt(String encryptedDataBase64,byte[] aesSecretKeyBytes) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] dataBytes = Base64Utils.decodeFromString(encryptedDataBase64);
- cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(aesSecretKeyBytes, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- return new String(result);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesDecrypt失败:data={},异常:{}", encryptedDataBase64, e);
- }
- return null;
- }
- /**
- * 对业务数据进行加密,用AES解密
- *
- * @param encryptedDataBase64
- * @return
- */
- public static String aesDecrypt(String encryptedDataBase64,byte[] aesSecretKeyBytes,String chartsetName) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] dataBytes = Base64Utils.decodeFromString(encryptedDataBase64);
- cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(aesSecretKeyBytes, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- if(chartsetName == null || chartsetName.length()==0){
- chartsetName = "UTF-8";
- }
- return new String(result,chartsetName);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesDecrypt失败:data={},异常:{}", encryptedDataBase64, e);
- }
- return null;
- }
- /**
- * 对业务数据进行加密,用AES加密再用Base64编码
- *
- * @param data 待加密数据
- * @return
- */
- public static String aesEncrypt(String data,byte[] AES_SECRET_KEY_BYTES) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] dataBytes = data.getBytes(DEFAULT_CHARSET);
- cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- return Base64Utils.encodeToString(result);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesEncrypt失败:data={},异常:{}", data, e);
- }
- return null;
- }
- /**
- * 对业务数据进行加密,用AES解密
- *
- * @param encryptedDataBase64
- * @return
- */
- public static String aesDecryp(String encryptedDataBase64,byte[] AES_SECRET_KEY_BYTES) {
- try {
- // 加密算法/工作模式/填充方式
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] dataBytes = Base64Utils.decodeFromString(encryptedDataBase64);
- cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(AES_SECRET_KEY_BYTES, "AES"));
- byte[] result = cipher.doFinal(dataBytes);
- return new String(result,DEFAULT_CHARSET);
- } catch (Exception e) {
- logger.error("执行CodecUtil.aesDecrypt失败:data={},异常:{}", encryptedDataBase64, e);
- }
- return null;
- }
- /**
- * 对数据进行加密,用SHA1加密再转换为16进制
- *
- * @param data
- * @return
- */
- public static String sha1Encrypt(String data,String SHA1_SECRET_KEY ) {
- return DigestUtils.sha1Hex(data + SHA1_SECRET_KEY);
- }
- /**
- * 对数据进行加密,用SHA1加密再转换为16进制
- *
- * @param data
- * @return
- */
- public static String sha1Encrypt(String data) {
- return DigestUtils.sha1Hex(data + SHA1_SECRET_KEY);
- }
- /**
- * AES密钥长度,支持128、192、256
- */
- private static final int AES_SECRET_KEY_LENGTH = 128;
- private static String generateAESSecretKeyBase64(String key) {
- try {
- KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
- keyGenerator.init(AES_SECRET_KEY_LENGTH);
- SecretKey secretKey = keyGenerator.generateKey();
- return Base64Utils.encodeToString(secretKey.getEncoded());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- static class LoginDemoVo {
- private String account;
- private String password;
- public String getAccount() {
- return account;
- }
- public void setAccount(String account) {
- this.account = account;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
- public static void main(String[] args) throws Exception {
- long timestamp = System.currentTimeMillis();
- JSONObject r = new JSONObject();
- // r.put("poundNo","");
- r.put("subtaskId","13111111111");
- r.put("validate","11111111");
- r.put("beginDate","2024-04-03 11:11:11");
- r.put("endDate","2024-04-03 11:11:11");
- r.put("poundNo","");
- r.put("unit",3);
- r.put("batchNo",3);
- r.put("productName",3);
- r.put("netWeight",3);
- // r.put("loadingStartDate","2024-04-03 11:11:11");
- // r.put("loadingEndDate","2024-04-03 11:11:11");
- r.put("remark",3);
- r.put("operationStatus",3);
- r.put("firstWeighingTime","2024-04-03 11:11:11");
- r.put("secondWeighingTime","2024-04-03 11:11:11");
- String data = JSON.toJSONString(r);
- //对参数进行加密
- String encryptedData = CodecUtil.aesEncrypt(data);
- //生成签名
- String sign = CodecUtil.sha1Encrypt(encryptedData + timestamp);
- //封装请求参数
- r = new JSONObject();
- r.put("encryptedData",encryptedData);
- r.put("timestamp",timestamp);
- r.put("sign",sign);
- //加密后的请求
- System.out.println("加密后的请求:" + JSON.toJSONString(r));
- //请求url
- // String url = "http://123.183.159.70:5066/sso-server/user/register";
- //返回结果
- // String result2 = HttpRequestor.doPost(url, JSON.toJSONString(r));
- // System.out.println(result2);
- }
- }
|