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;
- }
- }
|