Подпись, созданная с использованием API openssl C++, не соответствует тому же коду в PythonC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Подпись, созданная с использованием API openssl C++, не соответствует тому же коду в Python

Сообщение Anonymous »

У меня есть код Python, который генерирует подпись на основе хэш-строки в качестве данных. Он использует криптографическую библиотеку для расчета подписи на основе хеша. Он использует файл закрытого ключа .pem, который также содержит закрытый и открытый ключ. Он использует API-интерфейс Serialization.load_pem_private_key() для получения закрытого ключа путем чтения файла .pem. Затем, используя этот закрытый ключ, он генерирует подпись, используя следующий метод криптографии в Python.

Код: Выделить всё

privateKey.sign(hashData,
padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=32),
utils.Prehashed(hashes.SHA256()))
Он всегда генерирует новую подпись, если даже hashData совпадает с введенными здесь.
Затем он проверяет эту сгенерированную подпись, извлекая открытый ключ из того же файла .pem и затем вызывая проверьте API следующим образом

Код: Выделить всё

publicKey.verify(
generated_signature,
hashData,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=32
),
utils.Prehashed(hashes.SHA256())
)
В Python проверка прошла успешно. Я попытался имитировать ту же логику на C++, используя API OpenSSL версии 3.4.0. Генерация подписи прошла успешно, но когда я пытаюсь проверить ее с помощью этого инструмента на основе Python, проверка завершается ошибкой

Код: Выделить всё

failed to verify with private key from key file 'key.pem'.
Ниже приведен пример кода на C++, написанный для имитации той же логики.

Код: Выделить всё

#define _CRT_SECURE_NO_WARNINGS
#include "openssl/pem.h"
#include "openssl/err.h"
#include "openssl/evp.h"
#include "openssl/rsa.h"
#include "openssl/sha.h"
#include 
#include 
#include 
#include 
#include 
#include "ms/applink.c"

void handleOpenSSLErrors()
{
ERR_print_errors_fp(stderr);
abort();
}

// Load RSA private key from a PEM file
EVP_PKEY* loadPrivateKey(const std::string& filePath)
{
FILE* keyFile = nullptr;
errno_t r_code = fopen_s(&keyFile, filePath.c_str(), "rb");
if (!keyFile) {
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/79262027/signature-generated-using-openssl-c-api-does-not-match-with-same-code-in-pytho[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»