【发布时间】:2013-11-27 09:24:37
【问题描述】:
目前在我的项目中,DSA 签名是通过 perl 生成的,并通过 perl 在其他服务器上进行验证。它工作正常。
几天前,我尝试将一项服务从 perl 迁移到 php,发现 php 会生成符号,而 perl 无法验证。此外,如果我在控制台中生成登录(使用 openssl 命令)- perl 还说签名无效。 所以,它看起来像这样:
PHP 签名 控制台签名 perl 签名
为什么会这样?
用于签名的私钥是相同的。
Perl 代码:
my $pk = Crypt::OpenSSL::DSA->read_priv_key('private.key');
print encode_base64( $pk->sign( md5($data) ) );
PHP 代码:
$pk = openssl_get_privatekey('private key string');
openssl_sign(md5($data, true), $signature, $pk, OPENSSL_ALGO_DSS1));
echo base64_encode($signature);
控制台代码(验证):
openssl dsa -in private_key.pem -pubout -out dsa_public_key.pem
openssl dgst -dss1 -verify dsa_public_key.pem -signature sign.bin data.md5
完全迷路了.. 第二天我找不到任何答案:( 你能告诉我挖的方法吗?
【问题讨论】:
标签: perl openssl dsa php-openssl