| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | package org.jeecg.common.util.security;import cn.hutool.core.codec.Base64Decoder;import cn.hutool.core.codec.Base64Encoder;import cn.hutool.crypto.SecureUtil;import cn.hutool.crypto.asymmetric.KeyType;import cn.hutool.crypto.asymmetric.RSA;import cn.hutool.crypto.asymmetric.Sign;import cn.hutool.crypto.asymmetric.SignAlgorithm;import cn.hutool.crypto.symmetric.AES;import org.jeecg.common.util.security.entity.*;import com.alibaba.fastjson.JSONObject;import javax.crypto.SecretKey;import java.security.KeyPair;public class SecurityTools {    public static final String ALGORITHM = "AES/ECB/PKCS5Padding";    public static SecurityResp valid(SecurityReq req) {        SecurityResp resp=new SecurityResp();        String pubKey=req.getPubKey();        String aesKey=req.getAesKey();        String data=req.getData();        String signData=req.getSignData();        RSA rsa=new RSA(null, Base64Decoder.decode(pubKey));        Sign sign= new Sign(SignAlgorithm.SHA1withRSA,null,pubKey);        byte[] decryptAes = rsa.decrypt(aesKey, KeyType.PublicKey);        //log.info("rsa解密后的秘钥"+ Base64Encoder.encode(decryptAes));        AES aes = SecureUtil.aes(decryptAes);        String dencrptValue =aes.decryptStr(data);        //log.info("解密后报文"+dencrptValue);        resp.setData(JSONObject.parseObject(dencrptValue));        boolean verify = sign.verify(dencrptValue.getBytes(), Base64Decoder.decode(signData));        resp.setSuccess(verify);        return resp;    }    public static SecuritySignResp sign(SecuritySignReq req) {        SecretKey secretKey = SecureUtil.generateKey(ALGORITHM);        byte[] key= secretKey.getEncoded();        String prikey=req.getPrikey();        String data=req.getData();        AES aes = SecureUtil.aes(key);        aes.getSecretKey().getEncoded();        String encrptData =aes.encryptBase64(data);        RSA rsa=new RSA(prikey,null);        byte[] encryptAesKey = rsa.encrypt(secretKey.getEncoded(), KeyType.PrivateKey);        //log.info(("rsa加密过的秘钥=="+Base64Encoder.encode(encryptAesKey));        Sign sign= new Sign(SignAlgorithm.SHA1withRSA,prikey,null);        byte[] signed = sign.sign(data.getBytes());        //log.info(("签名数据===》》"+Base64Encoder.encode(signed));        SecuritySignResp resp=new SecuritySignResp();        resp.setAesKey(Base64Encoder.encode(encryptAesKey));        resp.setData(encrptData);        resp.setSignData(Base64Encoder.encode(signed));        return resp;    }    public static MyKeyPair generateKeyPair(){        KeyPair keyPair= SecureUtil.generateKeyPair(SignAlgorithm.SHA1withRSA.getValue(),2048);        String priKey= Base64Encoder.encode(keyPair.getPrivate().getEncoded());        String pubkey= Base64Encoder.encode(keyPair.getPublic().getEncoded());        MyKeyPair resp=new MyKeyPair();        resp.setPriKey(priKey);        resp.setPubKey(pubkey);        return resp;    }}
 |