Мне нужно подписать данные на моем сервере в php и проверить подписанные данные в моем настольном приложении Java. Моя проблема в том, что мне не удается сгенерировать ключ, который принимают оба языка …
Моей первой попыткой было сгенерировать ключ с помощью Java KeyPairGenerator, но как показано в этот вопрос, Я не мог сделать openssl, чтобы прочитать ключ.
Теперь я сгенерировал ключи с помощью openssl так:
$openssl dsaparam 512 < /dev/random > dsaparam.pem
$openssl gendsa dsaparam.pem -out dsa_priv.pem
$openssl dsa -in dsa_priv.pem -pubout -out dsa_pub.pem
Я сейчас пытаюсь что-то подписать этим кодом:
<?php
$data = "test";
$pkeyid = openssl_pkey_get_private("dsa_priv.pem");
echo openssl_sign($data, $signature, $pkeyid);
echo "<br/>";
echo $signature;
?>
Результат?
openssl_sign(): supplied key param cannot be coerced into a private key in ...
Что я делаю неправильно ? Может кто-нибудь помочь мне сгенерировать работающий ключ DSA и подписать что-нибудь с ним?
Вы упускаете одну важную вещь здесь. openssl_pkey_get_private
Метод принимает ключ в виде строки или файла с file://
протокол. Следующий пример работает как положено:
$data = "test";
$pkeyid = openssl_pkey_get_private("file://dsa_priv.pem");
openssl_sign($data, $signature, $pkeyid);
echo "\nSignature: " . base64_encode($signature) . "\n";
И производит:
Signature: MCwCFBpkSESngh+6ooMQZj7i+76t87QmAhQJTfyvvoZ4YFPd722R2qRnXD/Giw==
Других решений пока нет …