繁体   English   中英

DSA算法:登录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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM