У меня есть приложение C++, чтобы подписать и проверить некоторые данные, теперь я хочу, чтобы проверить данные в PHP, после мой C++ код для подписи данных:C++ DSS Подпись проверка в PHP
extern "C" __declspec(dllexport) BYTE* Sign(BYTE* bytdata)
{
// Private key blob
BYTE prKeyBlob[] = {7 , 2 , 0 , 0 , 0 , 34 , 0 , 0 , ...};
HCRYPTPROV hProv = NULL;
HCRYPTKEY prKey;
HCRYPTHASH hHash;
DWORD SignLen;
if(CryptAcquireContext(&hProv, NULL, NULL, PROV_DSS, CRYPT_VERIFYCONTEXT))
// Creating cryptography provider
{
// Importing public key
if(!CryptImportKey(hProv, prKeyBlob, sizeof(prKeyBlob), 0, 0, &prKey))
return NULL;
// Creating hash object
if(!CryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash))
return NULL;
if(!CryptHashData(hHash, bytdata, DATALEN, 0))
return NULL;
// Signing hashed value
if(!CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, &SignLen))
return NULL;
BYTE* bytSign = (BYTE*)malloc(SignLen);
if(CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, bytSign, &SignLen))
return bytSign;
else
return NULL;
}
else
return NULL;
}
Я попробовал PHP openssl_verify(), но я не могу правильно подать открытый ключ; в C++ У меня есть байтовый массив открытого ключа blob, но я не знаю, как извлечь открытый ключ из этого массива и использовать его с php openssl.
function verify($data, $sign)
{
// fetch public key from certificate and ready it
$cert = file_get_contents('./key.pem');
$pubkeyid = openssl_get_publickey($cert) or die("KEY ERROR");
// state whether signature is okay or not
return openssl_verify($data, $sign, $pubkeyid, OPENSSL_ALGO_DSS1)?1:0;
}
Но я получаю "ошибка: 0906D06C: PEM подпрограммы: PEM_read_bio: нет линия старта" от openssl_get_publickey
моего содержания key.pem файла:
-----BEGIN PUBLIC KEY-----
fkNkBaO1Y0ZruN8LD8BGm3IF00bbSNZN/ql8ak0duOjbzDP229rnkPFDIPihbO
9Uw6369b3suwqvPY3w+VzwRKKfLG99KiMxMgF3H3IvJl8hyzQf6qJGJ9X
sonzhrTqDeugT9fa2FnpY5pg+7g+6MqSRh1T0qTii9JFcwVf5r/o=
-----END PUBLIC KEY-----
Спасибо заранее.
Это не форум, который позволяет вам получить реализацию бесплатно. Пожалуйста, покажите нам, что вы пробовали. «Я пробовал PHP openssl_verify(), но я не могу правильно подать открытый ключ» - это не описание ошибки. –
Вопрос обновлен –