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

OSCHINA-MIRROR/feiy-RSA_AES_Restful

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

#RSA_AES_Restful RESTful API является состоянием без состояния, поэтому для обеспечения безопасности требуется отправка аутентификационных данных при каждом запросе. Использование веб-кookies и сессий недопустимо, так как они могут быть легко скомпрометированы. Вместо этого следует использовать имя пользователя и URL запроса вместе с уникальным идентификатором (GUID), зашифрованными с использованием пароля и симметричного алгоритма шифрования.

При получении пакета сервер проверяет имя пользователя, использует пароль из базы данных для расшифровки (URL + GUID) и проверяет наличие GUID в глобальном множестве. Если GUID уже существует, то аутентификация проваливается; если нет, то GUID добавляется в множество и аутентификация проходит успешно. Если пользователь не найден или произошла ошибка при декодировании, это также считается проваленной аутентификацией.

Процесс генерации пар ключей RSA: Генерация приватного ключа: openssl genrsa -out rsa_private_key.pem 1024 Создание открытого ключа на основе приватного ключа: openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout Приватный ключ еще не готов к использованию и требует PKCS#8 кодировки: openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt

Процесс шифрования и дешифрования: 1. Вытягивание значений параметров mes, сортировка ключей и создание строки signdata из значений. 2. Шифрование signdata с помощью приватного ключа магазина методом RSA, создание подписи signn и преобразование ее в base64. 3. Добавление подписи signn в конец mes для создания нового сообщения data. 4. Зашифрование data AES с постоянным ключом 16 байт и преобразование его в base64. 5. Шифрование постоянного ключа 16 байт RSA с помощью публичного ключа получателя и преобразование его в base64. 6. Отправка POST запроса на URL http://xxxx/xxx/api/xxx/xxx/xxx/xxx, содержащего merchantaccount, зашифрованного data и зашифрованного encryptkey. 7. Получение JSON ответа, который содержит зашифрованные данные и ключ. 8. Расшифровка encryptkey с помощью приватного ключа магазина методом RSA. 9. Расшифровка data AES с использованием decryptkey.

def request_process(self, mes_data):
    values = {}
    values['merchant_account'] = Gl.merchant_account
    encrypt_key = '1234567890123456'
    values['GUID'] = random(8)
    data = self.aes_base64_encrypt(json.dumps(mes_data), encrypt_key)
    values['data'] = data
    values['encrypt_key'] = self.rsa_base64_encrypt(encrypt_password, Gl.public_key)

GUIDs = {}

def result_decrypt(self, result):
    # Поиск password='1234567890123456' в базе данных
    account = result['merchant_account']
    with encrypt_password = db.find.where(username=account).password:
        encrypt_key = self.rsa_base64_encrypt(encrypt_password, Gl.public_key)
        if result['encrypt_key'] == encrypt_key:
            kdata = result['data']
            rdata = self.base64_aes_decrypt(kdata, encrypt_password)
            print('Расшифрованные данные=' + rdata)
            session_key = result['GUID']  # Предотвращение повторной отправки атаки
            if GUIDs[account] != session_key:
                GUIDs[account] = session_key
                return self.success(json_data)
            else:
                return self.error()
    return self.error()

Пример использования функций:

request_process_instance = RequestProcessClass()
result_decrypt_instance = ResultDecryptClass()

# Пример вызова функции request_process
request_process_instance.request_process({"example": "data"})

# Пример вызова функции result_decrypt
result_decrypt_instance.result_decrypt({"merchant_account": "example", "data": "encrypted_data", "encrypt_key": "encrypted_key"})

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

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

Введение

RSA-AES симметричное шифрование + GUID для аутентификации restfulAPI. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

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

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