1. Введение
St-encrypt-sdk — это Spring Boot интерфейс для шифрования, который позволяет автоматически шифровать и расшифровывать возвращаемые значения и параметры с помощью аннотаций.
Версия 3.0 поддерживает Spring Boot 3.x, версия 1.2.1 поддерживает Spring Boot 2.x.
Запрос, отправленный вызывающей стороной:
{
key: RSA публичный ключ шифрования (случайный AES_KEY###время t###appId###авторизация auth), используется ###разделитель, где appId и авторизация auth могут быть нулевыми
data: AES шифрование (данные data)
}
Сервер использует приватный ключ RSA для расшифровки AES_key, appId и авторизации auth, чтобы проверить действительность запроса.
Ответ сервера:
{
data: AES_ключ шифрования (данные data)
sign: приватный ключ MD5withRSA(data)
}
Безопасность относительна и зависит от ценности и затрат.
2. Использование
Maven:
<dependency>
<groupId>vip.ylove</groupId>
<artifactId>st-encrypt-sdk</artifactId>
<version>3.0.1</version>
</dependency>
или
<dependency>
<groupId>vip.ylove</groupId>
<artifactId>st-encrypt-sdk-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
В качестве примера использования SpringBoot с Maven, добавьте зависимость в файл pom.xml:
<dependency>
<groupId>vip.ylove</groupId>
<artifactId>st-encrypt-sdk-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
Добавьте аннотацию @StEnableSecurity в класс запуска Application:
@SpringBootApplication
@StEnableSecurity
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Добавьте RSA публичный и приватный ключи, а также appId и авторизацию auth в файле application.yml:
st:
encrypt:
privateKey: '' #rsa приватный ключ как серверу
publicKey: '' #rsa публичный ключ как клиенту или может быть пустым
appId: '' #appId как клиенту или может быть пустым
auth: '' #auth как клиенту или может быть пустым
Шифруйте запросы и шифруйте ответы:
@StEncrypt
@PostMapping("/encrypt")
public BaseResult encrypt(@RequestBody Object form){
log.info("{}",form);
return BaseResult.success_(form);
}
Если требуется проверка авторизации, реализуйте интерфейс StAbstractAuth:
@Service
public class StAuthService implements StAbstractAuth {
@Override
public boolean auth(String appId, String auth, String t, StEncrypt stEncrypt) {
//имитация проверки авторизации
log.info("по умолчанию аутентификация:appId[{}]-auth[{}]-t[{}]-stEncrypt[{}]",appId, auth,t,stEncrypt);
if ("123456".equals(appId) && "123456".equals(auth)) {
return true;
}
log.debug("проверка авторизации не прошла");
return false;
}
@Override
public String key() {
String key = StAbstractAuth.super.key();
//если нет динамического ключа, можно получить статический ключ здесь, например, токен, JWT и т.д.
return key;
}
}
Вызов интерфейса третьей стороны:
//шифрование параметров запроса
StResquestBody encrypt = StClientUtil.encrypt(stConfig.getPublicKey(),
System.currentTimeMillis(),
stConfig.getAppId(),
stConfig.getAppAuth(), form);
//отправка запроса
EncryptResult stEncryptBody = serverService.encrypt(encrypt);
Object result = null;
if( stEncryptBody.isSuccess()){
//расшифровка данных
result = StClientUtil.dencrypt(stConfig.getPublicKey(), stEncryptBody);
}else{
result = stEncryptBody;
}
При необходимости изменения стандартного инструмента JSON-сериализации Jackson, достаточно реализовать интерфейс StAbstractJsonDcode:
/**
* настройка шифрования и дешифрования с использованием fastjson
*/
@Configuration
public class ConfigStJsonDcode {
@Bean
public StAbstractJsonDcode initStAbstractJsonCode(){
return new StAbstractJsonDcode(){
@Override
public String toJson(Object data) {
return JSONObject.toJSONString(data);
}
@Override
public <T> T toBean(String data, Class<T> cls) {
return JSONObject.parseObject(data,cls);
}
@Override
public <T> T toBean(byte[] data, Class<T> cls) {
return JSONObject.parseObject(data,cls);
}};}
}
- При интеграции со SpringBoot в некоторых сценариях, таких как необходимость фильтрации параметров XSS, параметры уже были зашифрованы, и многие фреймворки не смогут выполнить фильтрацию в слое фильтра, потому что параметры всё ещё находятся в зашифрованном состоянии. Можно настроить код для выполнения фильтрации в HandlerInterceptor. Для этого можно обратиться к коду vip.ylove.server.advice.dencrypt.StRequestHandlerIntercepter.
- В настоящее время поддерживаются GET, POST и другие методы, включая обычные запросы GET, запросы POST JSON, запросы POST формы и запросы на загрузку файлов. Вы можете обратиться к предоставленному демо для реализации клиентского и стороннего вызовов. JetBrains предоставляет лицензию IDEA для st-encrypt.
![]()
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )