Алгоритм DSA: вход в стек переполнения

Мне нужно подписать данные на моем сервере в 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 и подписать что-нибудь с ним?

0

Решение

Вы упускаете одну важную вещь здесь. 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==

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]