我需要使用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密钥并对其进行签名?

===============>>#1 票数:2 已采纳

您在这里错过了一件重要的事情。 openssl_pkey_get_private方法采用密钥作为字符串或具有file://协议的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==

  ask by Sharcoux translate from so

未解决问题?本站智能推荐: