Я пытаюсь подписать строку с помощью:
$rsa = new Crypt_RSA();
//$rsa->setPassword('*****');
$rsa->loadKey(file_get_contents('i.pem')); // private key
$plaintext = 'f2e140eb-2b09-44ab-8504-87b25d81914c';
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
$ciphertext = $rsa->sign($plaintext);
$reto = base64_encode($ciphertext);
когда я проверяю это локально, с помощью:
$pubb_key = openssl_pkey_get_public(file_get_contents('instancia_imta_ope.crt'));
$keyData = openssl_pkey_get_details($pubb_key);
$pkeyy = $keyData['key'];
$rsa->loadKey($pkeyy); // PUBLIC key
echo $rsa->verify($plaintext, $ciphertext) ? 'verified' : 'unverified';
он показывает ПРОВЕРЕНО, когда я использую тестовую страницу с моим брокером, ЭТОТ ЖЕ КОД не работает. Он не восстанавливает исходную строку. Пытаясь использовать что-то другое, я попробовал следующий странный код:
$rsa = new Crypt_RSA();
$rsa->loadKey(file_get_contents('i.pem')); // PRIVATE key, IT SHOULD BE PUBLIC
$plaintext = 'f2e140eb-2b09-44ab-8504-87b25d81914c';
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);
$reto = base64_encode($ciphertext);
это странно или не логично, потому что я использую закрытый ключ для шифрования, он должен быть открытым ключом, а цель использует свой закрытый ключ для расшифровки сообщения. Как ни странно, этот код weid заставляет страницу тестера отправить OK, он восстанавливает строку. Я не знаю почему. Все это является частью большего сообщения, которое, наконец, обрабатывается с подписью xml, когда я все обрабатываю (добавление подписи xml), другая страница тестера брокера отправляет недопустимые подписи, я могу поспорить, что это из-за странного код. Не беда, вопрос: ПОЧЕМУ ПРАВИЛЬНЫЙ КОД (rsa->sign....) НЕ РАБОТАЕТ? ЧТО ТЫ ДУМАЕШЬ ИЗ ЭТОГО? спасибо марио