0f0e5fa19f2f14a309490d548ed6b0814ae3beea.svn-base 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package org.jeecg.common.util.security;
  2. import cn.hutool.core.codec.Base64Decoder;
  3. import cn.hutool.core.codec.Base64Encoder;
  4. import cn.hutool.crypto.SecureUtil;
  5. import cn.hutool.crypto.asymmetric.KeyType;
  6. import cn.hutool.crypto.asymmetric.RSA;
  7. import cn.hutool.crypto.asymmetric.Sign;
  8. import cn.hutool.crypto.asymmetric.SignAlgorithm;
  9. import cn.hutool.crypto.symmetric.AES;
  10. import org.jeecg.common.util.security.entity.*;
  11. import com.alibaba.fastjson.JSONObject;
  12. import javax.crypto.SecretKey;
  13. import java.security.KeyPair;
  14. public class SecurityTools {
  15. public static final String ALGORITHM = "AES/ECB/PKCS5Padding";
  16. public static SecurityResp valid(SecurityReq req) {
  17. SecurityResp resp=new SecurityResp();
  18. String pubKey=req.getPubKey();
  19. String aesKey=req.getAesKey();
  20. String data=req.getData();
  21. String signData=req.getSignData();
  22. RSA rsa=new RSA(null, Base64Decoder.decode(pubKey));
  23. Sign sign= new Sign(SignAlgorithm.SHA1withRSA,null,pubKey);
  24. byte[] decryptAes = rsa.decrypt(aesKey, KeyType.PublicKey);
  25. //log.info("rsa解密后的秘钥"+ Base64Encoder.encode(decryptAes));
  26. AES aes = SecureUtil.aes(decryptAes);
  27. String dencrptValue =aes.decryptStr(data);
  28. //log.info("解密后报文"+dencrptValue);
  29. resp.setData(JSONObject.parseObject(dencrptValue));
  30. boolean verify = sign.verify(dencrptValue.getBytes(), Base64Decoder.decode(signData));
  31. resp.setSuccess(verify);
  32. return resp;
  33. }
  34. public static SecuritySignResp sign(SecuritySignReq req) {
  35. SecretKey secretKey = SecureUtil.generateKey(ALGORITHM);
  36. byte[] key= secretKey.getEncoded();
  37. String prikey=req.getPrikey();
  38. String data=req.getData();
  39. AES aes = SecureUtil.aes(key);
  40. aes.getSecretKey().getEncoded();
  41. String encrptData =aes.encryptBase64(data);
  42. RSA rsa=new RSA(prikey,null);
  43. byte[] encryptAesKey = rsa.encrypt(secretKey.getEncoded(), KeyType.PrivateKey);
  44. //log.info(("rsa加密过的秘钥=="+Base64Encoder.encode(encryptAesKey));
  45. Sign sign= new Sign(SignAlgorithm.SHA1withRSA,prikey,null);
  46. byte[] signed = sign.sign(data.getBytes());
  47. //log.info(("签名数据===》》"+Base64Encoder.encode(signed));
  48. SecuritySignResp resp=new SecuritySignResp();
  49. resp.setAesKey(Base64Encoder.encode(encryptAesKey));
  50. resp.setData(encrptData);
  51. resp.setSignData(Base64Encoder.encode(signed));
  52. return resp;
  53. }
  54. public static MyKeyPair generateKeyPair(){
  55. KeyPair keyPair= SecureUtil.generateKeyPair(SignAlgorithm.SHA1withRSA.getValue(),2048);
  56. String priKey= Base64Encoder.encode(keyPair.getPrivate().getEncoded());
  57. String pubkey= Base64Encoder.encode(keyPair.getPublic().getEncoded());
  58. MyKeyPair resp=new MyKeyPair();
  59. resp.setPriKey(priKey);
  60. resp.setPubKey(pubkey);
  61. return resp;
  62. }
  63. }