增加基本加解密方式

master
bynt 2 years ago
parent 861cef8529
commit c4e75e5297

@ -9,4 +9,6 @@ public class AdPlatFormConstants {
}
public static final String AD_PLATFORM = "ad-platform";
public static final String PLATFORM_USER = "platform-user";
}

@ -0,0 +1,336 @@
package com.baiye.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.CharsetUtil;
import com.baiye.constant.AdPlatFormConstants;
import lombok.extern.slf4j.Slf4j;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.Objects;
/**
* @author Enzo
* @date : 2022/11/1
*/
@Slf4j
public class EncryptUtil {
public static final String MD5 = "MD5";
public static final String SHA1 = "SHA1";
public static final String HmacMD5 = "HmacMD5";
public static final String HmacSHA1 = "HmacSHA1";
public static final String DES = "DES";
public static final String AES = "AES";
/**
*
*/
public static final String SIGN_ALGORITHMS = "SHA1PRNG";
/**
* 使uft-8
*/
public static String charset = CharsetUtil.UTF_8;
/**
* DES
*/
public int keysizeDES = 0;
/**
* AES
*/
public static int keysizeAES = 128;
public static EncryptUtil me;
private EncryptUtil() {
//单例
}
//双重锁
public static EncryptUtil getInstance() {
if (me == null) {
synchronized (EncryptUtil.class) {
if (me == null) {
me = new EncryptUtil();
}
}
}
return me;
}
/**
* 使MessageDigest
*
* @param res
* @param algorithm
* @return
*/
private String messageDigest(String res, String algorithm) {
try {
MessageDigest md = MessageDigest.getInstance(algorithm);
byte[] resBytes = charset == null ? res.getBytes() : res.getBytes(charset);
return base64(md.digest(resBytes));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 使KeyGenerator/
*
* @param res
* @param algorithm 使
* @param key 使
* @return
*/
private String keyGeneratorMac(String res, String algorithm, String key) {
try {
SecretKey sk = null;
if (key == null) {
KeyGenerator kg = KeyGenerator.getInstance(algorithm);
sk = kg.generateKey();
} else {
byte[] keyBytes = charset == null ? key.getBytes() : key.getBytes(charset);
sk = new SecretKeySpec(keyBytes, algorithm);
}
Mac mac = Mac.getInstance(algorithm);
mac.init(sk);
byte[] result = mac.doFinal(res.getBytes());
return base64(result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 使KeyGeneratorDES/AES216
*
* @param res
* @param algorithm 使
* @param key
* @param keysize
* @param isEncode
* @return
*/
private static String keyGeneratorES(String res, String algorithm, String key, int keysize, boolean isEncode) {
try {
KeyGenerator kg = KeyGenerator.getInstance(algorithm);
SecureRandom random = SecureRandom.getInstance(SIGN_ALGORITHMS);
if (keysize == 0) {
byte[] keyBytes = charset == null ? key.getBytes() : key.getBytes(charset);
random.setSeed(keyBytes);
kg.init(random);
} else if (key == null) {
kg.init(keysize);
} else {
byte[] keyBytes = charset == null ? key.getBytes() : key.getBytes(charset);
random.setSeed(keyBytes);
kg.init(keysize, random);
}
SecretKey sk = kg.generateKey();
SecretKeySpec sks = new SecretKeySpec(sk.getEncoded(), algorithm);
Cipher cipher = Cipher.getInstance(algorithm);
if (isEncode) {
cipher.init(Cipher.ENCRYPT_MODE, sks);
byte[] resBytes = charset == null ? res.getBytes() : res.getBytes(charset);
return parseByte2HexStr(cipher.doFinal(resBytes));
} else {
cipher.init(Cipher.DECRYPT_MODE, sks);
return new String(cipher.doFinal(Objects.requireNonNull(parseHexStr2Byte(res))));
}
} catch (Exception e) {
log.error("++++++++++++++++++ the keyGeneratorES error +++++++++++++++");
}
return null;
}
private String base64(byte[] res) {
return Base64.encode(res);
}
/**
* 16
*/
public static String parseByte2HexStr(byte[] buf) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**
* 16
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1) {
return null;
}
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
/**
* md5
*
* @param res
* @return
*/
public String MD5(String res) {
return messageDigest(res, MD5);
}
/**
* md5
*
* @param res
* @param key
* @return
*/
public String MD5(String res, String key) {
return keyGeneratorMac(res, HmacMD5, key);
}
/**
* 使SHA1
*
* @param res
* @return
*/
public String SHA1(String res) {
return messageDigest(res, SHA1);
}
/**
* 使SHA1
*
* @param res
* @param key
* @return
*/
public String SHA1(String res, String key) {
return keyGeneratorMac(res, HmacSHA1, key);
}
/**
* 使DES
*
* @param res
* @param key
* @return
*/
public String DESencode(String res, String key) {
return keyGeneratorES(res, DES, key, keysizeDES, true);
}
/**
* 使DES
*
* @param res
* @param key
* @return
*/
public String DESdecode(String res, String key) {
return keyGeneratorES(res, DES, key, keysizeDES, false);
}
/**
* 使AES
*
* @param res
* @param key
* @return
*/
public static String AESEncode(String res, String key) {
return keyGeneratorES(res, AES, key, keysizeAES, true);
}
/**
* 使AES
*
* @param res
* @param key
* @return
*/
public static String AESDecode(String res, String key) {
return keyGeneratorES(res, AES, key, keysizeAES, false);
}
/**
* 使
*
* @param res
* @param key
* @return
*/
public String XORencode(String res, String key) {
byte[] bs = res.getBytes();
for (int i = 0; i < bs.length; i++) {
bs[i] = (byte) ((bs[i]) ^ key.hashCode());
}
return parseByte2HexStr(bs);
}
/**
* 使
*
* @param res
* @param key
* @return
*/
public String XORdecode(String res, String key) {
byte[] bs = parseHexStr2Byte(res);
for (int i = 0; i < bs.length; i++) {
bs[i] = (byte) ((bs[i]) ^ key.hashCode());
}
return new String(bs);
}
/**
* 使
*
* @param res
* @param key
* @return
*/
public int XOR(int res, String key) {
return res ^ key.hashCode();
}
/**
* 使Base64
*
* @param res
* @return
*/
public String Base64Encode(String res) {
return Base64.encode(res.getBytes());
}
/**
* 使Base64
*
* @param res
* @return
*/
public String Base64Decode(String res) {
return new String(Base64.decode(res));
}
}

@ -20,8 +20,8 @@ import com.baiye.annotation.rest.AnonymousDeleteMapping;
import com.baiye.annotation.rest.AnonymousGetMapping;
import com.baiye.annotation.rest.AnonymousPostMapping;
import com.baiye.config.properties.RsaProperties;
import com.baiye.constant.AdPlatFormConstants;
import com.baiye.exception.BadRequestException;
import com.baiye.manager.UserTokenManager;
import com.baiye.model.dto.JwtUserDto;
import com.baiye.modules.security.service.OnlineUserService;
import com.baiye.modules.security.service.dto.AuthUserDto;
@ -29,10 +29,7 @@ import com.baiye.properties.SecurityProperties;
import com.baiye.properties.bean.LoginCodeEnum;
import com.baiye.properties.bean.LoginProperties;
import com.baiye.security.TokenProvider;
import com.baiye.util.RedisUtils;
import com.baiye.util.RsaUtils;
import com.baiye.util.SecurityUtils;
import com.baiye.util.StringUtils;
import com.baiye.util.*;
import com.google.common.collect.ImmutableMap;
import com.wf.captcha.base.Captcha;
@ -100,8 +97,7 @@ public class AuthorizationController {
final JwtUserDto jwtUserDto = (JwtUserDto) authentication.getPrincipal();
// 保存在线信息
onlineUserService.save(jwtUserDto, token, request);
String jwtTokenString = UserTokenManager.generateToken(jwtUserDto.getUser().getId());
String jwtTokenString = AESUtils.encrypt(jwtUserDto.getUser().getId().toString(), AdPlatFormConstants.PLATFORM_USER);
// 返回 token 与 用户信息
Map<String, Object> authInfo = ImmutableMap.of("token", properties.getTokenStartWith() + token, "jwtToken", jwtTokenString, "user", jwtUserDto);

@ -2,15 +2,16 @@ package com.baiye.socket;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.AdPlatFormConstants;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.http.WebSocketResponse;
import com.baiye.manager.UserTokenManager;
import com.baiye.model.dto.SendWebSocketDTO;
import com.baiye.model.enums.ResponseCode;
import com.baiye.model.enums.WebSocketEnums;
import com.baiye.modules.system.service.MessageNotificationService;
import com.baiye.modules.system.service.UserMessageService;
import com.baiye.modules.system.service.dto.UserMessageDto;
import com.baiye.util.AESUtils;
import com.baiye.util.SpringContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -33,7 +34,6 @@ import java.util.concurrent.atomic.AtomicInteger;
@Component
@ServerEndpoint(value = "/ws/prosperous")
public class WebSocketServer {
private Long onlineId;
@PostConstruct
public void init() {
@ -53,9 +53,9 @@ public class WebSocketServer {
@OnOpen
public void onOpen(Session session) {
Long userId = getUserId(session);
log.info("=============== user id as {} ===================",userId);
if (userId != null) {
SESSIONS.put(userId, session);
onlineId = userId;
// 在线数加1
int cnt = ONLINE_COUNT.incrementAndGet();
log.info("有连接加入,当前连接用户为 {},当前连接数为:{}", userId, cnt);
@ -231,7 +231,10 @@ public class WebSocketServer {
if (queryString != null &&
StringUtils.isNotBlank(StringUtils.substring(queryString, DefaultNumberConstants.FOURTEEN_NUMBER))) {
String substring = queryString.substring(DefaultNumberConstants.FOURTEEN_NUMBER);
return UserTokenManager.getUserId(substring);
String decrypt = AESUtils.decrypt(substring, AdPlatFormConstants.PLATFORM_USER);
if (StringUtils.isNotBlank(decrypt)) {
return Long.parseLong(decrypt);
}
}
return null;
}
@ -263,5 +266,4 @@ public class WebSocketServer {
e.printStackTrace();
}
}
}

Loading…
Cancel
Save