0

我需要在我的服务器上用 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 密钥并用它签名?

4

1 回答 1

2

你在这里错过了一件重要的事情。该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==

于 2016-05-25T10:26:40.200 回答