diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/eoss/SSOPluginLogin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/eoss/SSOPluginLogin.java index 0c6164d..a4f2316 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/eoss/SSOPluginLogin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/eoss/SSOPluginLogin.java @@ -1,25 +1,24 @@ package shkd.sys.sys.eoss; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import kd.bos.cache.CacheFactory; import kd.bos.cache.DistributeSessionlessCache; +import kd.bos.exception.ErrorCode; +import kd.bos.exception.KDBizException; +import kd.bos.exception.KDException; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.login.thirdauth.ThirdSSOAuthHandler; import kd.bos.login.thirdauth.UserAuthResult; import kd.bos.login.thirdauth.UserProperType; import kd.bos.servicehelper.user.UserServiceHelper; +import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; -import redis.clients.jedis.JedisPoolConfig; +import shkd.sys.sys.utils.RSAUtils; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.*; import java.io.IOException; +import java.security.PrivateKey; -import static kd.bos.login.thirdauth.UserProperType.UserName; /** * @author: Lang @@ -30,20 +29,19 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler { private final String CLIENT_ID = System.getProperty("clientKey-scict"); private final String CLIENT_SECRET = System.getProperty("clientSecret-scict"); private final String EOSS_IP = System.getProperty("ip-port"); + /** * 方法实现用户没有登录的时候跳转认证中心的登录地址 - * @param httpServletRequest - * @param httpServletResponse - * @param s + * */ @Override public void callTrdSSOLogin(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s) { - //认证中心的登录地址 - logger.info(String.format("eoss_ip:%s,client_id:%s,client_secret:%s,重定向地址:%s",EOSS_IP,CLIENT_ID,CLIENT_SECRET,s)); + //认证中心的登录地址 + logger.info(String.format("eoss_ip:%s,client_id:%s,client_secret:%s,重定向地址:%s", EOSS_IP, CLIENT_ID, CLIENT_SECRET, s)); try { - String ssourl= EOSS_IP+"/service/SGE-project-sctz-master/pc/dist/login.html"; - if (httpServletRequest.getRequestURI().contains("/auth/logout.do")){ + String ssourl = EOSS_IP + "/service/SGE-project-sctz-master/pc/dist/login.html"; + if (httpServletRequest.getRequestURI().contains("/auth/logout.do")) { String userName = UserServiceHelper.getCurrentUser("name").getString("name"); DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion"); String userKey = "user_sessionId_" + userName; // 构造一个唯一的键 @@ -51,13 +49,13 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler { if (sessionId != null) { AuthService.logout(EOSS_IP, sessionId); } - }else{ - /** + } else { + /* *重定向的统一认证的地址 获取授权码 */ - ssourl=String.format("%s/sso2/authCenter/authorize?client_id=%s&response_type=code&authType=0&redirect_uri=%s", - EOSS_IP,CLIENT_ID,s); - logger.info(String.format("重定向地址→sendRedirect:%s",ssourl)); + ssourl = String.format("%s/sso2/authCenter/authorize?client_id=%s&response_type=code&authType=0&redirect_uri=%s", + EOSS_IP, CLIENT_ID, s); + logger.info(String.format("重定向地址→sendRedirect:%s", ssourl)); } httpServletResponse.sendRedirect(ssourl); } catch (IOException e) { @@ -67,24 +65,27 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler { /** * 实现苍穹调用认证系统的接口解析认证凭据返回用户信息,按数据格式返回认证结果。 - * @param httpServletRequest - * @param httpServletResponse - * @return + * */ @Override public UserAuthResult getTrdSSOAuth(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { - logger.info(String.format("getTrdSSOAuth→httpServletRequest:%s",httpServletRequest)); + logger.info(String.format("getTrdSSOAuth→httpServletRequest:%s", httpServletRequest)); //返回的认证结果 - UserAuthResult result=new UserAuthResult(); + UserAuthResult result = new UserAuthResult(); //获取返回的授权码 String code = httpServletRequest.getParameter("code"); //获取返回的 sessionId String sessionId = httpServletRequest.getParameter("sessionId"); - logger.info(String.format("getTrdSSOAuth→授权码code:%s",code)); - if (StringUtils.isEmpty(code)){ + String userName = httpServletRequest.getParameter("userName"); + +// RSAUtils. + logger.info(String.format("getTrdSSOAuth→授权码code:%s", code)); + result.setUserType(UserProperType.UserName); + if (StringUtils.isEmpty(code) && StringUtils.isEmpty(userName)) { logger.error("getTrdSSOAuth→授权码code为空"); result.setSucess(false); - }else { + return result; + } else if (StringUtils.isNotEmpty(code)){ try { //TODO:调用accessToken方法 String access_token = AuthService.accessToken(code, EOSS_IP, CLIENT_ID, CLIENT_SECRET); @@ -100,14 +101,23 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler { result.setUser(user); result.setSucess(true); logger.info("SSO用户登录成功,进入苍穹系统"); - String userKey = "user_sessionId_" + user; // 构造一个唯一的键 DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion"); - cache.put(userKey,sessionId);//将自定义参数加入缓存 - + cache.put(userKey, sessionId);//将自定义参数加入缓存 } } catch (Exception e) { - e.printStackTrace(); + throw new KDBizException("获取用户信息接口异常,SSO用户登录失败!"+e); + } + }else if (StringUtils.isNotEmpty(userName)){ + try{ + PrivateKey privateKey1 = RSAUtils.getPrivateKey(Base64.decodeBase64(RSAUtils.privateKey)); + String sourceData = new String(RSAUtils.decryptByKey(privateKey1, Base64.decodeBase64(userName.getBytes()))); + result.setUser(sourceData); + result.setSucess(true); + logger.info("SSO用户登录成功,进入苍穹系统"); + }catch (Exception e){ + ErrorCode errorCode = new ErrorCode("error_code", "私钥解密出现异常,请联系运维人员排查!"); + throw new KDException(errorCode, e); } } return result; diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java index d1d089c..316cedc 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java @@ -7,6 +7,7 @@ import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.db.DB; import kd.bos.db.DBRoute; +import kd.bos.exception.ErrorCode; import kd.bos.exception.KDException; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; @@ -15,11 +16,12 @@ import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.util.StringUtils; +import org.apache.commons.codec.binary.Base64; import shkd.sys.sys.midservice.handler.CreateToDoHandler; import shkd.sys.sys.midservice.handler.DealToDoHandler; import shkd.sys.sys.midservice.handler.deleteToDoHandler; -import shkd.sys.sys.midservice.model.BacklogMessage; import shkd.sys.sys.midservice.utils.GetUrlUtils; +import shkd.sys.sys.utils.RSAUtils; import java.util.*; @@ -55,7 +57,7 @@ public class ToDoResendTack extends AbstractTask { logger.info("组装待办、已办重发的数据"); Date beginTimeDate = startTimeDate; // 待办 - boolean hasNext = true; +// boolean hasNext = true; logger.info("开始抽取待办,参数 beginTimeDate:" + beginTimeDate + "endTimeDate:" + endTimeDate); extractToDoList(beginTimeDate, endTimeDate, "0"); extractToDoList(beginTimeDate, endTimeDate, "2"); @@ -67,13 +69,12 @@ public class ToDoResendTack extends AbstractTask { * @param startTime 开始时间 * @param endTime 结束时间 * @param t_status 待办状态 - * @return */ private void extractToDoList(Date startTime, Date endTime, String t_status) { String accountId = System.getProperty("backlog-accountid"); logger.info("拼接sql,此次拼接的待办类型为:" + t_status + "(1:待办、2已办、5撤销),使用参数startTime:" + startTime + "endTime:" + endTime); - StringBuffer cwbSql1 = new StringBuffer(); + StringBuilder cwbSql1 = new StringBuilder(); cwbSql1.append("SELECT "); cwbSql1.append("b.FID,"); cwbSql1.append("b.FPROCDEFID,"); @@ -172,8 +173,15 @@ public class ToDoResendTack extends AbstractTask { //接收人手机号 DynamicObject dynamicObject = QueryServiceHelper.queryOne("bos_user", "number,name," + "phone,username", new QFilter[]{new QFilter("id", "=", next.getString("freceiveuserid"))}); - String username = dynamicObject.getString("username"); - String number = dynamicObject.getString("number"); + String userName; + try { + userName = new String(org.apache.commons.codec.binary.Base64.encodeBase64(RSAUtils.encryptByKey( + RSAUtils.getPublicKey(Base64.decodeBase64(RSAUtils.publicKey)), + dynamicObject.getString("username").getBytes()))); + }catch (Exception e){ + ErrorCode errorCode = new ErrorCode("error_code", "公钥加密出现异常,请联系运维人员排查!"); + throw new KDException(errorCode, e); + }// String number = dynamicObject.getString("number"); switch (t_status) { case "0": //标题 @@ -186,42 +194,42 @@ public class ToDoResendTack extends AbstractTask { next.getString("factivityId"), next.getString("fbusinesskey"), next.getString("fid")); - StringBuffer form = new StringBuffer(); + StringBuilder form = new StringBuilder(); form.append("{"); form.append("\"title\":"); - form.append("\""+title+"\","); + form.append("\"").append(title).append("\","); form.append("\"bName\":"); - form.append("\""+next.getString("fentityname")+"\","); + form.append("\"").append(next.getString("fentityname")).append("\","); form.append("\"bussinessCode\":"); - form.append("\""+next.getString("fbillno")+"\","); + form.append("\"").append(next.getString("fbillno")).append("\","); form.append("\"urGency\":"); form.append("\"0\","); form.append("\"currentStepName\":"); - form.append("\""+next.getString("FNAME")+"\","); + form.append("\"").append(next.getString("FNAME")).append("\","); form.append("\"sendUserName\":"); - form.append("\""+next.getString("fstartname")+"\","); + form.append("\"").append(next.getString("fstartname")).append("\","); form.append("\"receiveUsersysName\":"); - form.append("\""+username+"\","); + form.append("\"").append(userName).append("\","); form.append("\"receiveUserId\":"); - form.append("\""+username+"\","); + form.append("\"").append(userName).append("\","); form.append("\"handleUrl\":"); - form.append("\""+pcUrl+"&number="+number+"\","); + form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\","); form.append("\"appHandleUrl\":"); - form.append("\""+pcUrl+"&number="+number+"\","); + form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\","); form.append("\"appName\":"); - form.append("\""+next.getString("fentityname")+"\","); + form.append("\"").append(next.getString("fentityname")).append("\","); form.append("\"pendingId\":"); - form.append("\""+next.getLong("fid")+"\","); + form.append("\"").append(next.getLong("fid")).append("\","); form.append("\"pendingAttr\":"); form.append("\"0\""); form.append("}"); - CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(),title,next.getLong("fid").toString(),username,next.getString("fbillno")); + CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(),title,next.getLong("fid").toString(),userName,next.getString("fbillno")); break; case "2": - DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"),username,next.getString("fbillno")); + DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"),userName,next.getString("fbillno")); break; case "5": - deleteToDoHandler.get_deleteToDoHandler().sendDeleteToDo(next.getLong("fid"),username,next.getString("fbillno")); + deleteToDoHandler.get_deleteToDoHandler().sendDeleteToDo(next.getLong("fid"),userName,next.getString("fbillno")); break; default: break; diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java index 3641491..a20c3d0 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java @@ -2,6 +2,8 @@ package shkd.sys.sys.midservice.servicehandler; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.exception.ErrorCode; +import kd.bos.exception.KDException; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QFilter; @@ -9,9 +11,11 @@ import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.workflow.engine.msg.ctx.MessageContext; import kd.bos.workflow.engine.msg.handler.AbstractServiceHandler; import kd.bos.workflow.engine.msg.info.ToDoInfo; +import org.apache.commons.codec.binary.Base64; import shkd.sys.sys.midservice.handler.CreateToDoHandler; import shkd.sys.sys.midservice.handler.DealToDoHandler; import shkd.sys.sys.midservice.handler.deleteToDoHandler; +import shkd.sys.sys.utils.RSAUtils; import java.util.List; @@ -34,38 +38,47 @@ public class BacklogServiceHandle extends AbstractServiceHandler { //几个待办 List userIds = todoInfo.getUserIds(); DynamicObjectCollection query = QueryServiceHelper.query("bos_user", "id,name,number" + - ".0,phone,username", new QFilter[]{new QFilter("id", "in", userIds)}); + ",phone,username", new QFilter[]{new QFilter("id", "in", userIds)}); DynamicObject dynamicObject = QueryServiceHelper.queryOne("wf_hitaskinst", "billno,startname,id,name", new QFilter[]{new QFilter("id", "=", todoInfo.getTaskId())}); logger.info("####待办taskid:"+todoInfo.getTaskId()); for (DynamicObject query_one : query) { - StringBuffer form = new StringBuffer(); + String userName; + try { + userName = new String(Base64.encodeBase64(RSAUtils.encryptByKey( + RSAUtils.getPublicKey(Base64.decodeBase64(RSAUtils.publicKey)), + query_one.getString("username").getBytes()))); + }catch (Exception e){ + ErrorCode errorCode = new ErrorCode("error_code", "公钥加密出现异常,请联系运维人员排查!"); + throw new KDException(errorCode, e); + } + StringBuilder form = new StringBuilder(); // BacklogMessage backlogMessage = new BacklogMessage(); form.append("{"); form.append("\"title\":"); - form.append("\""+todoInfo.getTitle()+"\","); + form.append("\"").append(todoInfo.getTitle()).append("\","); form.append("\"bName\":"); - form.append("\""+ctx.getEntityName()+"\","); + form.append("\"").append(ctx.getEntityName()).append("\","); form.append("\"bussinessCode\":"); - form.append("\""+dynamicObject.getString("billno")+"\","); + form.append("\"").append(dynamicObject.getString("billno")).append("\","); form.append("\"urGency\":"); form.append("\"0\","); form.append("\"currentStepName\":"); - form.append("\""+dynamicObject.getString("name")+"\","); + form.append("\"").append(dynamicObject.getString("name")).append("\","); form.append("\"sendUserName\":"); - form.append("\""+dynamicObject.getString("startname")+"\","); + form.append("\"").append(dynamicObject.getString("startname")).append("\","); form.append("\"receiveUsersysName\":"); - form.append("\""+query_one.getString("username")+"\","); + form.append("\"").append(query_one.getString("username")).append("\","); form.append("\"receiveUserId\":"); - form.append("\""+query_one.getString("username")+"\","); + form.append("\"").append(query_one.getString("username")).append("\","); form.append("\"handleUrl\":"); - form.append("\""+todoInfo.getUrl()+"&number="+query_one.getString("number")+"\","); + form.append("\"").append(todoInfo.getUrl()).append("&userName=").append(userName).append("\","); form.append("\"appHandleUrl\":"); - form.append("\""+todoInfo.getUrl()+"&number="+query_one.getString("number")+"\","); + form.append("\"").append(todoInfo.getUrl()).append("&userName=").append(userName).append("\","); form.append("\"appName\":"); - form.append("\""+ctx.getEntityName()+"\","); + form.append("\"").append(ctx.getEntityName()).append("\","); form.append("\"pendingId\":"); - form.append("\""+todoInfo.getTaskId()+"\","); + form.append("\"").append(todoInfo.getTaskId()).append("\","); form.append("\"pendingAttr\":"); form.append("\"0\""); form.append("}"); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/utils/RSAUtils.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/utils/RSAUtils.java new file mode 100644 index 0000000..040f4c2 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/utils/RSAUtils.java @@ -0,0 +1,73 @@ +package shkd.sys.sys.utils; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.security.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +public class RSAUtils { + + private static Provider provider; + + public static String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyUK5/Oy6WQzOj+BSuT4jI7PIM3i18fCXdfv3R47UmxdSvAR64myjuCGQxbiiPI4jGBPn4rB+Jh8LbBm7vCD+04Qry6QIKBDjlVAFFhSdP8BDdryve+1WXfT2mG7Ma11pU/wjITwa4yM+YwKbfpv/jM4TZDkejR/Z0tEEzrACQwb9p+Wxjvi27S8nPDCGX6wvmq2rmpzMUZVWCXPg8ox2F9UYMCziQJcGBFBz8vcYfTrAtMaBDmBok/ZqfIS6V7n0Bjozvb2EAtABF9SwIzKmVnYKv0KRVBVRKgmtYJ3apYblYCtg4LjkffMo9uum4QYBfYvUGmnvDGxufbn22k0xqwIDAQAB"; + + public static String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJQrn87LpZDM6P4FK5PiMjs8gzeLXx8Jd1+/dHjtSbF1K8BHribKO4IZDFuKI8jiMYE+fisH4mHwtsGbu8IP7ThCvLpAgoEOOVUAUWFJ0/wEN2vK977VZd9PaYbsxrXWlT/CMhPBrjIz5jApt+m/+MzhNkOR6NH9nS0QTOsAJDBv2n5bGO+LbtLyc8MIZfrC+arauanMxRlVYJc+DyjHYX1RgwLOJAlwYEUHPy9xh9OsC0xoEOYGiT9mp8hLpXufQGOjO9vYQC0AEX1LAjMqZWdgq/QpFUFVEqCa1gndqlhuVgK2DguOR98yj266bhBgF9i9Qaae8MbG59ufbaTTGrAgMBAAECggEAB5Hj7vh0dd7+cfjtA5yrs68Sa6Uxqrzy5XQps95SbtbsvLeqa5PMgKN6j4VHTOHHviMZiLQ8unBWfKVnI0dWblw9TXaI/ADOnpIY7uCtnXU81F16eD3QDs6k68zXEX689HS6WYiqNjrgINc7RALYFNK3dgCT/pjhF4XXGXMTUrQChoCamJ6t9eag+tGlXwF8g2lIzoVJtFMaw88cxtcsIi3LJAa1mmdxJGZMXg/pghu2NZw48Hzn4+vNvqFmo/MKGxWbKFAdshDADnaZArH9oUdLQIOau5HKH4nApZKQMn5gA3Ui20DHm1CK9AG0ttm2jRFMgMrJ+guIWXS1p7jVoQKBgQDrCtpILNJgEyVF+hZBD8PCOKZywctz+4aa7w2WAIPVX75bYVcgHq+g8mH8KPHkri6NjcoJ7gwMVhkoHjoYKPMEE7+8AhCp1e+9UkB2uLiexUpjPKTty1qAm1LY7mQzzinfMC3pmSNxFwSHsfuYu7AnqvGtSiXbUxaVtYfhdFWVEQKBgQDbNMMD5RS6SJTz58neOKjQkvbk9ASFjYkPwMlPACnCifw4uXTmrWAEMNWRMigkVRmq92BQ1ZIdOGRN2dzU7lEpQv7ApaE4P4YAw4mvkkCrG+1kBmvd/F5qpIlSmFFatdzraRgfsLjGlE0BYYhwIE5U6ZHItmA+1zE/zmu2A/tq+wKBgAgUhm6Gw/Czl8txDoTMEvHBWs+FJAZntjfrUe8/M0kJkpS3ovQiuezxiDbP/YjcCBOrtS9kNJvT9edwKpUcC0avmx7Of14nUaeThU3PieFDbQw+UHkwTXswW8fDYkR5qOzYTivCrPo9TVWQ49JbWXHzqX1ImEaS86rP48z3X93RAoGBANbr5EjtUmVSxLhfio1XAC1/6pKQrd5D5x6K5tWOU2Np5uG28+c4FewF9V9mzfTRe1klMkoPHDOKFs49zUb4YpsSFLTNsER2A+y7y0NZIg6iUx6/LQN5bRkiOYHB1gIaTYCCiiSIIKKSxO2VszA8fJDEcStZpQP3+VGWEgVj4h4BAoGBANxD5ATfQLPVDCrGUH/ikzv7ySW8XuAooD2Z/uNDpe2V0X7b9aiGIlRrHMFGHzAM9HVU371xVcwvTKnp9k8uQzzjaCXipCfoHThDB5Yd4HZkfBGCxiQrl85dyn2Tw2026cewH0dKg2GBaQx+cvpbbcXmCUUdkgF3gUVzdoDBTUOH"; + + static { + provider = new org.bouncycastle.jce.provider.BouncyCastleProvider(); + Security.addProvider(provider); + } + + /** + */ + public static KeyPair generateKeyPair() throws NoSuchAlgorithmException { + SecureRandom random = new SecureRandom(); + KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", provider); + int length = 2048; + generator.initialize(length, random); + return generator.generateKeyPair(); + } + + /** + */ + public static PublicKey getPublicKey(byte[] keyBytes) throws NoSuchAlgorithmException, InvalidKeySpecException { + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePublic(keySpec); + } + + public static byte[] encryptByKey(Key keys, byte[] byteArray) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", provider); + cipher.init(Cipher.ENCRYPT_MODE, keys); + return cipher.doFinal(byteArray); + } + + /** + */ + public static PrivateKey getPrivateKey(byte[] keyBytes) throws NoSuchAlgorithmException, InvalidKeySpecException { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePrivate(keySpec); + } + + /** + */ + public static byte[] decryptByKey(Key keys, byte[] byteArray) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", provider); + cipher.init(Cipher.DECRYPT_MODE, keys); + return cipher.doFinal(byteArray); + } + + /** + * + */ + public static String generateBase64Key(byte[] keys) { + return new String(Base64.encodeBase64(keys)); + } +} \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/utils/UtilsTest.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/utils/UtilsTest.java new file mode 100644 index 0000000..e456fe2 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/utils/UtilsTest.java @@ -0,0 +1,78 @@ +package shkd.sys.sys.utils; + + +import org.apache.commons.codec.binary.Base64; + +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.security.KeyPair; +import java.security.PrivateKey; + +import static org.apache.commons.lang.CharEncoding.UTF_8; + +public class UtilsTest { + + public static void main(String[] args) { + try { + //encrypt Data + String data = "19185669029-lang"; + KeyPair keyPair = RSAUtils.generateKeyPair(); + //公钥生成 提供给第三方 + String publicKey = RSAUtils.generateBase64Key(keyPair.getPublic().getEncoded()); + String encryptData = new String(Base64.encodeBase64(RSAUtils.encryptByKey( + RSAUtils.getPublicKey(Base64.decodeBase64(publicKey)), data.getBytes()))); + String encode_encryptData = URLEncoder.encode(encryptData, UTF_8); + + //私钥生成 星瀚解密使用 + String privateKey = RSAUtils.generateBase64Key(keyPair.getPrivate().getEncoded()); + String encode_privateKey = URLEncoder.encode(privateKey, UTF_8); + String url = String.format("http://localhost:8080/login/login.jsp?data=%s&key=%s", encode_encryptData, encode_privateKey); + //密文 URL 解码 + String originalData = URLDecoder.decode(encode_encryptData, UTF_8); + //解密 + PrivateKey privateKey1 = RSAUtils.getPrivateKey(Base64.decodeBase64(privateKey)); + String sourceData = new String(RSAUtils.decryptByKey(privateKey1, Base64.decodeBase64(originalData.getBytes()))); + + System.out.println(sourceData); + }catch (Exception e){ + e.printStackTrace(); + } +// try{ +// /** +// * 生成公钥密钥 +// */ +// KeyPair keyPair = RSAUtils.generateKeyPair(); +// //公钥生成 提供给第三方 +// String publickey = kd.bos.login.utils.RSAUtils.generateBase64Key(keyPair.getPublic().getEncoded()); +// System.out.println("公钥:"+publickey); +// //私钥生成 星瀚解密使用 +// String privateKey = kd.bos.login.utils.RSAUtils.generateBase64Key(keyPair.getPrivate().getEncoded()); +// System.out.println("密钥:"+privateKey); +// +// /** +// * 加密 +// */ +// String phone = "17299999999"; +// String encrptData = new String(Base64.encodeBase64(RSAUtils.encryptByKey(RSAUtils.getPublicKey(Base64.decodeBase64(publickey)),phone.getBytes()))); +// System.out.println("密文:"+encrptData); +// String UTF8encrptData = URLEncoder.encode(encrptData,UTF_8); +// System.out.println("密文UTF_8:"+UTF8encrptData); +// +// /** +// * 解密 +// */ +// String data = new String(RSAUtils.decryptByKey(RSAUtils.getPrivateKey(Base64.decodeBase64(privateKey)), Base64.decodeBase64(UTF8encrptData))); +// System.out.println(data); +//// String timeStamp = System.currentTimeMillis() + ""; +//// System.out.println(timeStamp); +//// String secret = "hjfdshfksdahfkjds"; +//// String shaDta = SHAUtils.getSHA256Hex(encrptData + timeStamp + secret); +//// System.out.println(shaDta); +// +// }catch (Exception e){ +// e.printStackTrace(); +// } + + } + +} \ No newline at end of file