This commit is contained in:
Vendored
+1
@@ -8,6 +8,7 @@
|
|||||||
"mainClass": "top.crushtj.xiaoyishu.auth.XiaoyiAuthApplication",
|
"mainClass": "top.crushtj.xiaoyishu.auth.XiaoyiAuthApplication",
|
||||||
"projectName": "xiaoyi-auth",
|
"projectName": "xiaoyi-auth",
|
||||||
"args": "",
|
"args": "",
|
||||||
|
"vmArgs": "-Djasypt.encryptor.password=GhaU7VjZd2b3M4Hbx4SelEXZc",
|
||||||
"envFile": "${workspaceFolder}/.env"
|
"envFile": "${workspaceFolder}/.env"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
<hutool.version>5.8.26</hutool.version>
|
<hutool.version>5.8.26</hutool.version>
|
||||||
<commons-lang3.version>3.12.0</commons-lang3.version>
|
<commons-lang3.version>3.12.0</commons-lang3.version>
|
||||||
<dypnsapi.version>2.0.0</dypnsapi.version>
|
<dypnsapi.version>2.0.0</dypnsapi.version>
|
||||||
|
<jasypt-starter.version>3.0.5</jasypt-starter.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<!-- 统一依赖管理 -->
|
<!-- 统一依赖管理 -->
|
||||||
@@ -176,6 +177,13 @@
|
|||||||
<artifactId>dypnsapi20170525</artifactId>
|
<artifactId>dypnsapi20170525</artifactId>
|
||||||
<version>${dypnsapi.version}</version>
|
<version>${dypnsapi.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- jasypt 加密工具 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.ulisesbocchio</groupId>
|
||||||
|
<artifactId>jasypt-spring-boot-starter</artifactId>
|
||||||
|
<version>${jasypt-starter.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,12 @@
|
|||||||
<groupId>com.aliyun</groupId>
|
<groupId>com.aliyun</groupId>
|
||||||
<artifactId>dypnsapi20170525</artifactId>
|
<artifactId>dypnsapi20170525</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- jasypt 加密工具 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.ulisesbocchio</groupId>
|
||||||
|
<artifactId>jasypt-spring-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package top.crushtj.xiaoyishu.auth.controller;
|
package top.crushtj.xiaoyishu.auth.controller;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@@ -22,6 +24,7 @@ import java.time.LocalDateTime;
|
|||||||
* @date 2025/11/21
|
* @date 2025/11/21
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@RestController
|
@RestController
|
||||||
public class TestController {
|
public class TestController {
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ spring:
|
|||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
# 数据库连接信息
|
# 数据库连接信息
|
||||||
url: jdbc:mysql://127.0.0.1:3306/xiaoyishu?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
url: jdbc:mysql://127.0.0.1:3306/xiaoyishu?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||||
username: ayi
|
username: ENC(q6eB0z65vHf2Fsm/DGFZpOea+GFigZNdnInAw2YvW1vMLWGAANwp+AcGiZB8lT5c)
|
||||||
password: Os0TpcErSh26nT4Nqqjgo2vwi3IaEglzj+brT2b7q0P4Dlhnv3OEQVUNpG/dYqvJZUCR2/IyfxQ4LnQIB7FcfQ==
|
password: ENC(ZUUg0fBx9YSK4c4hOtIpkBpNSXMbhsRCM0CBRYHYvSzJCXTu9dK4gMgODcKgyooo67Osmm2ccgBeHbJheSMTCQ==)
|
||||||
druid: # Druid 连接池
|
druid: # Druid 连接池
|
||||||
initial-size: 5 # 初始化连接池大小
|
initial-size: 5 # 初始化连接池大小
|
||||||
min-idle: 5 # 最小连接池数量
|
min-idle: 5 # 最小连接池数量
|
||||||
@@ -40,7 +40,6 @@ spring:
|
|||||||
wall: # 防火墙
|
wall: # 防火墙
|
||||||
config:
|
config:
|
||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
connection-properties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK6C4nQHNuYSebx/5vOdvDqP/o8AH+p73s1LWCFs915RiwVHvtEd+ropmXkCO3Agc9Zuo8pyMvccIgPL9F0I8YkCAwEAAQ==
|
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
database: 0 # Redis 数据库索引(默认为 0)
|
database: 0 # Redis 数据库索引(默认为 0)
|
||||||
@@ -73,6 +72,14 @@ logging:
|
|||||||
level:
|
level:
|
||||||
top.crushtj.xiaoyishu.auth.domain.mappers: debug
|
top.crushtj.xiaoyishu.auth.domain.mappers: debug
|
||||||
|
|
||||||
aliyun: # 接入阿里云(发送短信使用)
|
aliyun:
|
||||||
accessKeyId:
|
accessKeyId: ENC(h8yRFpNaFNA3NduXrnm8Z4D1jZr1UNapbYVdBxaSKsZMSn1RqJQ29RmqsZscxsea5vKuLdywVE+CYP3+Q+ZQ/A==)
|
||||||
accessKeySecret:
|
accessKeySecret: ENC(/Ovw0XK2/fFIGXKxOdmdUHvFPI0pNSHBDkLyjAXdbQytlCCNnBW8hFBseN4t4juumjJ5AJ9KBgvgDYCV+/gWGg==)
|
||||||
|
jasypt:
|
||||||
|
encryptor:
|
||||||
|
password:
|
||||||
|
algorithm: PBEWithHMACSHA512AndAES_256
|
||||||
|
key-obtention-iterations: 1000
|
||||||
|
string-output-type: base64
|
||||||
|
provider-name: SunJCE
|
||||||
|
iv-generator-classname: org.jasypt.iv.RandomIvGenerator
|
||||||
@@ -3,10 +3,12 @@ package top.crushtj.xiaoyishu.auth;
|
|||||||
import com.alibaba.druid.filter.config.ConfigTools;
|
import com.alibaba.druid.filter.config.ConfigTools;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
|
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
|
||||||
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
|
import org.jasypt.iv.RandomIvGenerator;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.TestPropertySource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ayi
|
* @author ayi
|
||||||
@@ -18,11 +20,13 @@ import org.springframework.boot.test.context.SpringBootTest;
|
|||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@TestPropertySource(properties = {"jasypt.encryptor.password=GhaU7VjZd2b3M4Hbx4SelEXZc"})
|
||||||
public class EncryptTest {
|
public class EncryptTest {
|
||||||
//@Autowired
|
//@Autowired
|
||||||
//private StringEncryptor defaultLazyEncryptor;
|
//private StringEncryptor defaultLazyEncryptor;
|
||||||
//private StringEncryptor pooledPbeStringEncryptor;
|
//private StringEncryptor pooledPbeStringEncryptor;
|
||||||
|
@Value("${jasypt.encryptor.password}")
|
||||||
|
private String encryptorPassword;
|
||||||
/**
|
/**
|
||||||
* Druid 密码加密
|
* Druid 密码加密
|
||||||
*/
|
*/
|
||||||
@@ -44,20 +48,37 @@ public class EncryptTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void smsEncode() {
|
void encrypt() {
|
||||||
String accessKeyId = manualEncrypt("", "Yu020320.");
|
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
|
||||||
System.out.println("accessKeyId:" + accessKeyId);
|
|
||||||
String accessKeySecret = manualEncrypt("", "Yu020320.");
|
// JDK 17适配的核心配置(关键参数必须完整)
|
||||||
System.out.println("accessKeySecret:" + accessKeySecret);
|
encryptor.setPassword(encryptorPassword); // AES-256要求密钥至少32位
|
||||||
|
encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256"); // JDK17原生支持的算法
|
||||||
|
encryptor.setKeyObtentionIterations(1000); // 迭代次数(固定值)
|
||||||
|
encryptor.setStringOutputType("base64"); // 输出格式(固定)
|
||||||
|
encryptor.setProviderName("SunJCE"); // 加密提供者(JDK17默认)
|
||||||
|
encryptor.setIvGenerator(new RandomIvGenerator()); // AES必须的IV生成器
|
||||||
|
|
||||||
|
// 待加密的原始值
|
||||||
|
String accessKeyId = "ayi";
|
||||||
|
String accessKeySecret = "HhpxE2HWE4bGTyB5";
|
||||||
|
|
||||||
|
try {
|
||||||
|
String cipherAccessKeyId = encryptor.encrypt(accessKeyId);
|
||||||
|
System.out.println("accessKeyId加密成功,密文:" + cipherAccessKeyId);
|
||||||
|
|
||||||
|
String decryptAccessKeyId = encryptor.decrypt(cipherAccessKeyId);
|
||||||
|
System.out.println("accessKeyId解密成功,明文:" + decryptAccessKeyId);
|
||||||
|
|
||||||
|
String cipherAccessKeySecret = encryptor.encrypt(accessKeySecret);
|
||||||
|
System.out.println("accessKeySecret加密成功,密文:" + cipherAccessKeySecret);
|
||||||
|
|
||||||
|
String decryptAccessKeySecret = encryptor.decrypt(cipherAccessKeySecret);
|
||||||
|
System.out.println("accessKeySecret解密成功,明文:" + decryptAccessKeySecret);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("加密失败原因:" + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String manualEncrypt(String plainText, String secretKey) {
|
|
||||||
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
|
|
||||||
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
|
|
||||||
config.setPassword(secretKey); // 密钥
|
|
||||||
config.setAlgorithm("PBEWithMD5AndDES"); // 算法
|
|
||||||
config.setPoolSize(1); // 池大小(默认)
|
|
||||||
encryptor.setConfig(config);
|
|
||||||
return encryptor.encrypt(plainText);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user