1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/catcancry-st-encrypt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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)
}

    1. Эффективность содержания AES-шифрования намного выше, чем у RSA, и оно обладает определённой степенью безопасности.
    1. Публичный ключ RSA зашифровал key, что делает его недоступным для похитителя, обеспечивая безопасность данных и предотвращая кражу информации об авторизации.
    1. Наличие appId и auth предотвращает подделку содержимого злоумышленником.

Сервер использует приватный ключ RSA для расшифровки AES_key, appId и авторизации auth, чтобы проверить действительность запроса.

Ответ сервера:

{
   data: AES_ключ шифрования (данные data)
   sign: приватный ключ MD5withRSA(data)
}

    1. Каждый запрос имеет свой уникальный AES_KEY, который сохраняется в памяти браузера и передаётся с использованием публичного ключа RSA. Злоумышленник не знает AES_KEY на протяжении всего процесса, что обеспечивает подлинность ответа сервера и предотвращает подмену данных.

Безопасность относительна и зависит от ценности и затрат.

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);
            }};}
}
  1. При интеграции со SpringBoot в некоторых сценариях, таких как необходимость фильтрации параметров XSS, параметры уже были зашифрованы, и многие фреймворки не смогут выполнить фильтрацию в слое фильтра, потому что параметры всё ещё находятся в зашифрованном состоянии. Можно настроить код для выполнения фильтрации в HandlerInterceptor. Для этого можно обратиться к коду vip.ylove.server.advice.dencrypt.StRequestHandlerIntercepter.
  1. В настоящее время поддерживаются GET, POST и другие методы, включая обычные запросы GET, запросы POST JSON, запросы POST формы и запросы на загрузку файлов. Вы можете обратиться к предоставленному демо для реализации клиентского и стороннего вызовов. JetBrains предоставляет лицензию IDEA для st-encrypt.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MulanPSL-2.0
Отмена

Обновления (3)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/catcancry-st-encrypt.git
git@api.gitlife.ru:oschina-mirror/catcancry-st-encrypt.git
oschina-mirror
catcancry-st-encrypt
catcancry-st-encrypt
master