
[英]How can I convert DSA public key from OpenSSL to OpenSSH format in PHP?
[英]DSA algorithm : Sign in PHP
我需要使用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://
协议的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==
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.