兴安访客小程序对接部分迁移

This commit is contained in:
zc
2025-06-05 17:04:25 +08:00
parent b3657fb024
commit 5761742c5a
39 changed files with 1480 additions and 125 deletions

View File

@@ -0,0 +1,29 @@
package com.dcsoft.auth.controller;
import com.dcsoft.auth.form.RegisterBody;
import com.dcsoft.auth.service.SysLoginService;
import com.dcsoft.common.core.domain.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
* 短信验证码控制
*/
@RestController
public class SmsLoginController {
@Autowired
private SysLoginService sysLoginService;
@PostMapping("app/sendSms")
public R<?> sendSms(@RequestBody RegisterBody register) {
R<String> result = sysLoginService.sendSms(register);
if (null != result && 200 == result.getCode()) {
return R.ok();
}
return R.fail("获取短信验证码失败");
}
}

View File

@@ -1,27 +1,28 @@
package com.dcsoft.auth.controller;
import javax.servlet.http.HttpServletRequest;
import com.dcsoft.auth.bean.ValidateResult;
import com.dcsoft.auth.form.IDaasBody;
import com.dcsoft.auth.utils.LicenseManager;
import com.dcsoft.auth.utils.LicenseThread;
import com.idsmanager.dingdang.jwt.DingdangUserRetriever;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.dcsoft.auth.form.LoginBody;
import com.dcsoft.auth.form.RegisterBody;
import com.dcsoft.auth.service.SysLoginService;
import com.dcsoft.auth.utils.LicenseManager;
import com.dcsoft.auth.utils.LicenseThread;
import com.dcsoft.auth.utils.RsaUiUtils;
import com.dcsoft.common.core.domain.R;
import com.dcsoft.common.core.utils.JwtUtils;
import com.dcsoft.common.core.utils.StringUtils;
import com.dcsoft.common.core.utils.bean.BeanUtils;
import com.dcsoft.common.security.auth.AuthUtil;
import com.dcsoft.common.security.service.TokenService;
import com.dcsoft.common.security.utils.SecurityUtils;
import com.dcsoft.system.api.model.LoginUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@@ -33,6 +34,7 @@ import java.util.Map;
@RestController
public class TokenController
{
private static final Logger log = LoggerFactory.getLogger(TokenController.class);
@Autowired
private TokenService tokenService;
@@ -43,31 +45,46 @@ public class TokenController
private Boolean enabled;
@PostMapping("login")
public R<?> login(@RequestBody LoginBody form)
{
public R<?> login(@RequestBody LoginBody form) throws Exception {
/* if(enabled){
ValidateResult validateResult = LicenseThread.validateResult.get("Authorize");
if (!validateResult.getIsValidate()){
return R.fail(validateResult.getMessage());
}
}*/
LoginUser userInfo=new LoginUser();
log.info("login form:{}", form);
LoginUser userInfo = new LoginUser();
// 用户登录
if("weixin".equals(form.getFlag())){
R<LoginUser> userInfos=sysLoginService.getWxUserInfo(form);
if ("weixin".equals(form.getFlag())) {
//微信登录openid必传phone必传
String s = RsaUiUtils.decryptByPrivateKey(form.getOpenid());
form.setOpenid(s);
R<LoginUser> userInfos = sysLoginService.getWxUserInfo(form);
userInfo = userInfos.getData();
if(userInfo==null){
return R.fail(userInfos.getCode(), userInfos.getMsg());
if (ObjectUtil.isEmpty(userInfo) || ObjectUtil.isEmpty(userInfo.getSysUser())) {
RegisterBody registerBody = new RegisterBody();
BeanUtils.copyProperties(form, registerBody);
userInfo = sysLoginService.appRegister(registerBody);
}
}else if("app".equals(form.getFlag())){
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
} else if ("app".equals(form.getFlag())) {
String str = RsaUiUtils.decryptByPrivateKey(form.getEncrypt());
JSONObject jsonObject = JSONObject.parseObject(str);
userInfo = sysLoginService.login(jsonObject.getString("username"), jsonObject.getString("password"));
//保存用户openid
if(StringUtils.isNotEmpty(form.getOpenid())){
sysLoginService.updateOpenId(userInfo,form);
if (StringUtils.isNotEmpty(form.getOpenid())) {
String s = RsaUiUtils.decryptByPrivateKey(form.getOpenid());
form.setOpenid(s);
sysLoginService.updateOpenId(userInfo, form);
}
}else{
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
} else if ("sms".equals(form.getFlag())) {
//短信登录openidphonesmsCode必传(openid不能使用存在他人手机号登录别人账号场景)
String s = RsaUiUtils.decryptByPrivateKey(form.getSmsCode());
form.setSmsCode(s);
userInfo = sysLoginService.Smslogin(form);
} else {
String s = RsaUiUtils.decryptByPrivateKey(form.getEncrypt());
JSONObject jsonObject = JSONObject.parseObject(s);
userInfo = sysLoginService.login(jsonObject.getString("username"), jsonObject.getString("password"));
}
// 获取登录token
return R.ok(tokenService.createToken(userInfo));
@@ -83,7 +100,7 @@ public class TokenController
}
}*/
LoginUser userInfo=new LoginUser();
LoginUser userInfo = new LoginUser();
// 用户登录
if("weixin".equals(form.getFlag())){
R<LoginUser> userInfos=sysLoginService.getWxUserInfo(form);
@@ -91,13 +108,13 @@ public class TokenController
if(userInfo==null){
R.fail();
}
}else if("app".equals(form.getFlag())){
} else if ("app".equals(form.getFlag())) {
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
//保存用户openid
if(!"".equals(form.getOpenid())){
sysLoginService.updateOpenId(userInfo,form);
if (!"".equals(form.getOpenid())) {
sysLoginService.updateOpenId(userInfo, form);
}
}else{
} else {
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
}
// 获取登录token
@@ -191,7 +208,7 @@ public class TokenController
return retMap;
}
//授权码更新接口
//授权码更新接口
@PostMapping("/updateSign")
public Map<String,Object> updateSign(String sign){
Map<String,Object> retMap=new HashMap<>(2);
@@ -202,4 +219,21 @@ public class TokenController
return retMap;
}
@PostMapping("/redisSet")
public R<?> redisSet(@RequestBody JSONObject js) {
tokenService.redisSet(js.getString("key"), js.getString("value"));
return R.ok();
}
@PostMapping("/redisGet")
public R<?> redisGet(@RequestBody JSONObject js) {
return R.ok(tokenService.redisGet(js.getString("key")));
}
@PostMapping("/redisDel")
public R<?> redisDel(@RequestBody JSONObject js) {
tokenService.redisDel(js.getString("key"));
return R.ok();
}
}

View File

@@ -16,15 +16,47 @@ public class LoginBody
* 用户密码
*/
private String password;
/**
* 登录方式
* **/
*/
private String flag;
/**
* 微信openid
* **/
*/
private String openid;
/**
* 短信验证码
*/
private String smsCode;
/**
* 手机号
*/
private String phone;
/**
* 加密后的数据
*/
private String encrypt;
public String getEncrypt() {
return encrypt;
}
public void setEncrypt(String encrypt) {
this.encrypt = encrypt;
}
public String getSmsCode() {
return smsCode;
}
public void setSmsCode(String smsCode) {
this.smsCode = smsCode;
}
public String getUsername()
{
@@ -62,6 +94,14 @@ public class LoginBody
this.openid = openid;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "LoginBody{" +
@@ -69,6 +109,8 @@ public class LoginBody
", password='" + password + '\'' +
", flag='" + flag + '\'' +
", openid='" + openid + '\'' +
", smsCode='" + smsCode + '\'' +
", phone='" + phone + '\'' +
'}';
}
}

View File

@@ -1,8 +1,9 @@
package com.dcsoft.auth.service;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.dcsoft.auth.form.LoginBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.dcsoft.auth.form.RegisterBody;
import com.dcsoft.common.core.constant.CacheConstants;
import com.dcsoft.common.core.constant.Constants;
import com.dcsoft.common.core.constant.SecurityConstants;
@@ -11,13 +12,27 @@ import com.dcsoft.common.core.domain.R;
import com.dcsoft.common.core.enums.UserStatus;
import com.dcsoft.common.core.exception.ServiceException;
import com.dcsoft.common.core.text.Convert;
import com.dcsoft.common.core.utils.SmsUtils;
import com.dcsoft.common.core.utils.StringUtils;
import com.dcsoft.common.core.utils.bean.BeanUtils;
import com.dcsoft.common.core.utils.ip.IpUtils;
import com.dcsoft.common.core.utils.uuid.IdUtils;
import com.dcsoft.common.core.web.domain.AjaxResult;
import com.dcsoft.common.redis.service.RedisService;
import com.dcsoft.common.security.utils.SecurityUtils;
import com.dcsoft.common.sms.config.properties.SmsProperties;
import com.dcsoft.system.api.RemoteUserService;
import com.dcsoft.system.api.domain.SmsDTO;
import com.dcsoft.system.api.domain.SysUser;
import com.dcsoft.system.api.model.LoginUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* 登录校验方法
@@ -27,6 +42,7 @@ import com.dcsoft.system.api.model.LoginUser;
@Component
public class SysLoginService
{
private static final Logger log = LoggerFactory.getLogger(SysLoginService.class);
@Autowired
private RemoteUserService remoteUserService;
@@ -39,6 +55,20 @@ public class SysLoginService
@Autowired
private RedisService redisService;
@Autowired
private SmsProperties smsProperties;
@Value("${visitor.deptId}")
private Long deptId;
@Value("${visitor.roleId}")
private Long roleId;
private static final String USER_REGISTER = "USER_REGISTER:";
private static final String USER_REGISTER_TIME = "USER_REGISTER_TIME:";
private static final long CASH_TIMEOUT = 60 * 5;
/**
* 登录
*/
@@ -77,7 +107,7 @@ public class SysLoginService
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
throw new ServiceException("登录用户:" + username + " 不存在");
throw new ServiceException("用户不存在/密码错误");
}
if (R.FAIL == userResult.getCode())
@@ -142,60 +172,164 @@ public class SysLoginService
recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
}
/**
* 注册(小程序注册都是一键注册)
*/
public LoginUser appRegister(RegisterBody registerBody) {
if (ObjectUtil.isNull(registerBody)) {
throw new ServiceException("请校验注册信息!");
}
// 注册用户信息
SysUser sysUser = new SysUser();
//如果有openId,从微信一键登录过来的
if (StringUtils.isNotBlank(registerBody.getOpenid())) {
sysUser.setOpenid(registerBody.getOpenid());
//查询该手机的用户信息是否绑定了openId没有则绑定openId
R<LoginUser> userInfo = remoteUserService.getUserInfos(registerBody.getPhone(), SecurityConstants.INNER);
if (null != userInfo && 200 == userInfo.getCode()) {
//如果没有openId更新该手机号的openId
if (ObjectUtil.isNotEmpty(userInfo.getData())
&& ObjectUtil.isNotEmpty(userInfo.getData().getSysUser())
&& StringUtils.isBlank(userInfo.getData().getSysUser().getOpenid())) {
SysUser sysUser1 = new SysUser();
sysUser1.setUserId(userInfo.getData().getSysUser().getUserId());
sysUser1.setOpenid(registerBody.getOpenid());
remoteUserService.updateOpenId(sysUser1, SecurityConstants.INNER);
return remoteUserService.getWxUserInfo(sysUser.getOpenid(), SecurityConstants.INNER).getData();
}
} else {
throw new ServiceException("微信登录注册异常!");
}
}
//如果是手机号验证码登录一键注册
if(StringUtils.isNotBlank(registerBody.getSmsCode())) {
//获取短信验证码
Object smsCode = redisService.getCacheObject(USER_REGISTER + registerBody.getPhone());
if (ObjectUtil.isNull(smsCode) && StringUtils.isBlank(String.valueOf(smsCode))) {
throw new ServiceException("验证码已过期,请重新获取");
}
if (!StringUtils.equals(registerBody.getSmsCode(), String.valueOf(smsCode))) {
throw new ServiceException("验证码不正确,请重新填写");
}
sysUser.setUserName(registerBody.getPhone());
sysUser.setPhonenumber(registerBody.getPhone());
}
sysUser.setUserName(registerBody.getPhone());
sysUser.setPhonenumber(registerBody.getPhone());
sysUser.setNickName(registerBody.getPhone());
//密码初始化
if (StringUtils.isBlank(registerBody.getPassword())) {
AjaxResult result = remoteUserService.selectConfigByKey("sys.user.initPassword");
String password = "123456";
if (result.isSuccess()) {
password = result.get("msg").toString();
}
registerBody.setPassword(password);
}
sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword()));
sysUser.setDeptId(deptId);
R<?> registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
if (R.FAIL == registerResult.getCode()) {
throw new ServiceException(registerResult.getMsg());
}
//查询新增的访客信息
R<LoginUser> userResult = null;
if (StringUtils.isNotBlank(registerBody.getOpenid())) {
userResult = remoteUserService.getWxUserInfo(sysUser.getOpenid(), SecurityConstants.INNER);
} else {
userResult = remoteUserService.getUserInfo(sysUser.getUserName(), SecurityConstants.INNER);
}
//给访客设置对应角色
SysUser sysUser1 = new SysUser();
sysUser1.setUserId(userResult.getData().getSysUser().getUserId());
sysUser1.setRoleId(roleId);
remoteUserService.insertVisitor(sysUser1, SecurityConstants.INNER);
recordLogService.recordLogininfor(sysUser.getOpenid(), Constants.REGISTER, "注册成功");
if (StringUtils.isNotBlank(sysUser.getOpenid())) {
return remoteUserService.getWxUserInfo(sysUser.getOpenid(), SecurityConstants.INNER).getData();
} else {
return remoteUserService.getUserInfo(sysUser.getUserName(), SecurityConstants.INNER).getData();
}
}
/**
* 登录
*/
public LoginUser login(String username)
{
public LoginUser Smslogin(LoginBody login) {
// 用户名不在指定范围内 错误
if (username.length() < UserConstants.USERNAME_MIN_LENGTH
|| username.length() > UserConstants.USERNAME_MAX_LENGTH)
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围");
if (login.getUsername().length() < UserConstants.USERNAME_MIN_LENGTH
|| login.getUsername().length() > UserConstants.USERNAME_MAX_LENGTH) {
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "用户名不在指定范围");
throw new ServiceException("用户名不在指定范围");
}
// IP黑名单校验
String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾访问IP已被列入系统黑名单");
if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "很遗憾访问IP已被列入系统黑名单");
throw new ServiceException("很遗憾访问IP已被列入系统黑名单");
}
// 查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
throw new ServiceException("登录用户:" + username + " 不存在");
//获取短信验证码
Object cashSmsCode = redisService.getCacheObject(USER_REGISTER + login.getUsername());
if (ObjectUtil.isNull(login.getSmsCode()) && StringUtils.isBlank(String.valueOf(login.getSmsCode()))) {
throw new ServiceException("验证码已过期,请重新获取");
}
if (!StringUtils.equals(login.getSmsCode(), String.valueOf(cashSmsCode))) {
throw new ServiceException("验证码不正确,请重新填写");
}
if (R.FAIL == userResult.getCode())
{
// 查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfos(login.getUsername(), SecurityConstants.INNER);
//没查到用户则注册
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
RegisterBody registerBody = new RegisterBody();
BeanUtils.copyProperties(login, registerBody);
registerBody.setPhone(login.getUsername());
registerBody.setOpenid(null);
return this.appRegister(registerBody);
}
if (R.FAIL == userResult.getCode()) {
throw new ServiceException(userResult.getMsg());
}
LoginUser userInfo = userResult.getData();
SysUser user = userResult.getData().getSysUser();
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
throw new ServiceException("对不起,您的账号:" + login.getUsername() + " 已被删除");
}
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
throw new ServiceException("对不起,您的账号:" + login.getUsername() + " 已停用");
}
recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
return userInfo;
if (user.getUserName().contains("WX_")) {
SysUser sysUser = new SysUser();
sysUser.setUserId(user.getUserId());
sysUser.setUserName(login.getUsername());
sysUser.setNickName(login.getUsername());
sysUser.setPhonenumber(login.getUsername());
remoteUserService.updateByUserId(sysUser, SecurityConstants.INNER);
}
// 查询用户信息
R<LoginUser> userResultNew = remoteUserService.getUserInfo(login.getUsername(), SecurityConstants.INNER);
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_SUCCESS, "登录成功");
return userResultNew.getData();
}
public void updateOpenId(LoginUser userInfo, LoginBody form) {
// 注册用户信息
SysUser sysUser = new SysUser();
sysUser=userInfo.getSysUser();
sysUser = userInfo.getSysUser();
sysUser.setUserName(form.getUsername());
sysUser.setOpenid(form.getOpenid());
R<?> registerResult = remoteUserService.updateOpenId(sysUser, SecurityConstants.INNER);
@@ -209,4 +343,47 @@ public class SysLoginService
R<LoginUser> registerResult = remoteUserService.getWxUserInfo(form.getOpenid(), SecurityConstants.INNER);
return registerResult;
}
/**
* 发送短信
*
* @param register
*/
public R<String> sendSms(RegisterBody register) {
if (StringUtils.isBlank(register.getPhone())) {
return R.fail("手机号不能为空!");
}
//生成六位验证码
String smsCode = SmsUtils.generateSmsCode();
SmsDTO smsDTO = new SmsDTO();
smsDTO.setTemplateId(smsProperties.getTemplate11());
smsDTO.setCaptcha(smsCode);
smsDTO.setPhone(register.getPhone());
AjaxResult ajaxResult = remoteUserService.sendMessage(smsDTO, SecurityConstants.INNER);
if (!ajaxResult.isSuccess()) {
throw new ServiceException(ajaxResult.get("msg").toString());
}
//缓存次数
int i = 1;
Integer time = redisService.getCacheObject(USER_REGISTER_TIME + register.getPhone());
//如果已经达到10次则达到单日上限
if (null != time) {
i = time + 1;
if(time == 10) {
throw new ServiceException("发送短信验证码次数已达到单日上限");
}
}
// 获取当天的结束时间点
Date endOfDay = DateUtil.endOfDay(new Date());
// 获取当前时间至当天结束的毫秒数
long cashTime = (endOfDay.getTime() - System.currentTimeMillis()) / 1000;
redisService.setCacheObject(USER_REGISTER_TIME + register.getPhone(), i, cashTime, TimeUnit.SECONDS);
//缓存短信
redisService.setCacheObject(USER_REGISTER + register.getPhone(), smsCode, CASH_TIMEOUT, TimeUnit.SECONDS);
return R.ok();
}
}

View File

@@ -0,0 +1,147 @@
package com.dcsoft.auth.utils;
import org.apache.tomcat.util.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
/**
* RSA加密解密
*
**/
public class RsaUiUtils {
// Rsa 私钥
public static String privateKey = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y=";
public static void main(String[] args) throws Exception {
// String s = decryptByPrivateKey("pWwsO5+mUIzh1svfQhswNKqI36UPrC4/tn6mzsSE9T9KwjpeZiw+sAZnyP51CxXl8saj4wUmI4aJcmgGdbM3eA==");
String s = decryptByPrivateKey("NeInqZTsJAXHnRMl4zbO89mJZ4/LBnoTPhdgiFXwtpsunoqQM7duJ2ZdoXKyUGEuKFestyQ4sO5Qx4mpD5m7Sg==");
System.out.println(s);
// JSONObject jsonObject = JSONObject.parseObject(s);
// System.out.println(jsonObject);
}
/**
* 私钥解密
*
* @param text 私钥
* @param text 待解密的文本
* @return 解密后的文本
*/
public static String decryptByPrivateKey(String text) throws Exception {
return decryptByPrivateKey(privateKey, text);
}
/**
* 公钥解密
*
* @param publicKeyString 公钥
* @param text 待解密的信息
* @return 解密后的文本
*/
public static String decryptByPublicKey(String publicKeyString, String text) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}
/**
* 私钥加密
*
* @param privateKeyString 私钥
* @param text 待加密的信息
* @return 加密后的文本
*/
public static String encryptByPrivateKey(String privateKeyString, String text) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}
/**
* 私钥解密
*
* @param privateKeyString 私钥
* @param text 待解密的文本
* @return 解密后的文本
*/
public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}
/**
* 公钥加密
*
* @param publicKeyString 公钥
* @param text 待加密的文本
* @return 加密后的文本
*/
public static String encryptByPublicKey(String publicKeyString, String text) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}
/**
* 构建RSA密钥对
*
* @return 生成后的公私钥信息
*/
public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
return new RsaKeyPair(publicKeyString, privateKeyString);
}
/**
* RSA密钥对对象
*/
public static class RsaKeyPair {
private final String publicKey;
private final String privateKey;
public RsaKeyPair(String publicKey, String privateKey) {
this.publicKey = publicKey;
this.privateKey = privateKey;
}
public String getPublicKey() {
return publicKey;
}
public String getPrivateKey() {
return privateKey;
}
}
}