DSA算法:登录PHP

DSA算法:登录PHP,php,sign,php-openssl,Php,Sign,Php Openssl,我需要用php在服务器上对数据进行签名,并在Java桌面应用程序上验证签名的数据。我的问题是我没有成功地生成两种语言都接受的密钥 我的第一次尝试是用Java生成密钥,但如中所示,我无法使用openssl读取密钥 现在,我使用openssl生成密钥,如下所示: $openssl dsaparam 512 < /dev/random > dsaparam.pem $openssl gendsa dsaparam.pem -out dsa_priv.pem $openssl dsa -in

我需要用php在服务器上对数据进行签名,并在Java桌面应用程序上验证签名的数据。我的问题是我没有成功地生成两种语言都接受的密钥

我的第一次尝试是用Java生成密钥,但如中所示,我无法使用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

我做错了什么?有人能帮我生成一个有效的DSA密钥并用它签名吗?

您缺少一件重要的事情。
openssl\u pkey\u get\u private
方法将密钥作为字符串或具有
file://
协议的文件。以下示例按预期工作:

$data = "test";

$pkeyid = openssl_pkey_get_private("file://dsa_priv.pem");
openssl_sign($data, $signature, $pkeyid);
echo "\nSignature: " . base64_encode($signature) . "\n";
并生产:


签名:MCWCFBPKSENSNGH+6ooMQZj7i+76t87QmAhQJTfyvvoZ4YFPd722R2qRnXD/Giw==

这里缺少一件重要的事情。
openssl\u pkey\u get\u private
方法将密钥作为字符串或具有
file://
协议的文件。以下示例按预期工作:

$data = "test";

$pkeyid = openssl_pkey_get_private("file://dsa_priv.pem");
openssl_sign($data, $signature, $pkeyid);
echo "\nSignature: " . base64_encode($signature) . "\n";
并生产:


签名:mcwcfbpksensngh+6ooMQZj7i+76t87QmAhQJTfyvvoZ4YFPd722R2qRnXD/Giw=

好的,我现在要离开一个月,所以我不能真正尝试,但我想你已经尝试过了,效果不错。谢谢好吧,我现在要离开一个月,所以我不能真的尝试,但我想你尝试过了,而且效果不错。谢谢
$data = "test";

$pkeyid = openssl_pkey_get_private("file://dsa_priv.pem");
openssl_sign($data, $signature, $pkeyid);
echo "\nSignature: " . base64_encode($signature) . "\n";