feat: 第三方登录完善

This commit is contained in:
landaiqing
2024-06-24 13:46:09 +08:00
parent dd86dc4486
commit 1d612ac47e
42 changed files with 1330 additions and 1148 deletions

View File

@@ -1,110 +0,0 @@
package com.schisandra.oss.common.utils;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Random;
/**
* @ClassName AESUtils 一定要选择16位密钥长度也就是KEY_LENGTH=16*836的话就需要修改环境的jar包。
* @Description TODO
* @Author L
* @Date 2024/1/26 17:27
*/
public class AESUtils {
/**
* 加密算法AES
*/
private static final String KEY_ALGORITHM = "AES";
/**
* key的长度Wrong key size: must be equal to 128, 192 or 256
* 传入时需要16、24、36
*/
private static final int KEY_LENGTH = 16 * 8;
/**
* 算法名称/加密模式/数据填充方式
* 默认AES/ECB/PKCS5Padding
*/
private static final String ALGORITHMS = "AES/ECB/PKCS5Padding";
/**
* 后端AES的key由静态代码块赋值
*/
public static String key;
static {
key = getKey();
}
/**
* 获取key
*/
public static String getKey() {
int length = KEY_LENGTH / 8;
StringBuilder uid = new StringBuilder(length);
//产生32位的强随机数
Random rd = new SecureRandom();
for (int i = 0; i < length; i++) {
//产生0-2的3位随机数
switch (rd.nextInt(3)) {
case 0:
//0-9的随机数
uid.append(rd.nextInt(10));
break;
case 1:
//ASCII在65-90之间为大写,获取大写随机
uid.append((char) (rd.nextInt(26) + 65));
break;
case 2:
//ASCII在97-122之间为小写获取小写随机
uid.append((char) (rd.nextInt(26) + 97));
break;
default:
break;
}
}
return uid.toString();
}
/**
* AES 加密
*
* @param content 加密的字符串
* @param encryptKey key值
*/
public static String encrypt(String content, String encryptKey) throws Exception {
//设置Cipher对象
Cipher cipher = Cipher.getInstance(ALGORITHMS);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), KEY_ALGORITHM));
//调用doFinal
// 转base64
return Base64.encodeBase64String(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8)));
}
/**
* AES 解密
*
* @param encryptStr 解密的字符串
* @param decryptKey 解密的key值
*/
public static String decrypt(String encryptStr, String decryptKey) throws Exception {
//base64格式的key字符串转byte
byte[] decodeBase64 = Base64.decodeBase64(encryptStr);
//设置Cipher对象
Cipher cipher = Cipher.getInstance(ALGORITHMS);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), KEY_ALGORITHM));
//调用doFinal解密
return new String(cipher.doFinal(decodeBase64));
}
}

View File

@@ -1,61 +0,0 @@
package com.schisandra.oss.common.utils;
import java.security.MessageDigest;
public class MD5Util {
//十六进制下数字到字符的映射数组
private final static String[] hexDigits = {"0", "1", "2", "3", "4",
"5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
/**
* 把inputString加密
*/
public static String md5(String inputString) {
return encodeByMD5(inputString);
}
/**
* 对字符串进行MD5加密
*/
private static String encodeByMD5(String originString) {
if (originString != null) {
try {
//创建具有指定算法名称的信息摘要
MessageDigest md = MessageDigest.getInstance("MD5");
//使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
byte[] results = md.digest(originString.getBytes("utf-8"));
//将得到的字节数组变成字符串返回
String resultString = byteArrayToHexString(results);
return resultString.toUpperCase();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
/**
* 转换字节数组为十六进制字符串
*
* @param
* @return 十六进制字符串
*/
private static String byteArrayToHexString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n += 256;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
}

View File

@@ -1,85 +0,0 @@
package com.schisandra.oss.common.utils;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import org.apache.commons.codec.binary.Base64;
import java.security.KeyPair;
import java.util.HashMap;
/**
* @ClassName RSAUtils
* @Description TODO
* @Author L
* @Date 2024/1/26 17:28
*/
public class RSAUtils {
/**
* 公钥加密(解密就要用到对应的私钥)
*
* @param msg 明文信息
* @param pubKey 公钥,用来加密明文
* @return
*/
public static String encryptByPublic(String msg, String pubKey) {
RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), null, pubKey);
return rsa.encryptBase64(msg, KeyType.PublicKey);
}
/**
* 私钥解密
*
* @param encryptMsg 公钥加密的密文
* @param priKey 私钥,用来解密密文
* @return
*/
public static String decryptByPrivate(String encryptMsg, String priKey) {
RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), priKey, null);
return rsa.decryptStr(encryptMsg, KeyType.PrivateKey);
}
/**
* 私钥加密(解密就要用到对应的公钥)
*
* @param msg 明文信息
* @param priKey 私钥,用来加密明文
* @return
*/
public static String encryptByPrivate(String msg, String priKey) {
RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), priKey, null);
return rsa.encryptBase64(msg, KeyType.PrivateKey);
}
/**
* 公钥解密
*
* @param encryptMsg 密文
* @param pubKey 公钥,用来解密
* @return
*/
public static String decryptByPublic(String encryptMsg, String pubKey) {
RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), null, pubKey);
return rsa.decryptStr(encryptMsg, KeyType.PublicKey);
}
/**
* 获取公私钥集合
*
* @return
*/
public static HashMap<String,String> getPriKeyAndPubKey() {
KeyPair pair = SecureUtil.generateKeyPair("RSA");
String privateKey = Base64.encodeBase64String(pair.getPrivate().getEncoded());
String publicKey = Base64.encodeBase64String(pair.getPublic().getEncoded());
HashMap<String,String> keys = new HashMap<>();
keys.put("privateKey",privateKey);
keys.put("publicKey",publicKey);
return keys;
}
}