首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openssl_verify,警告: openssl_verify():提供的密钥param不能强制进入公钥

问openssl_verify,警告: openssl_verify():提供的密钥param不能强制进入公钥
EN

Stack Overflow用户
提问于 2015-12-07 18:25:09
回答 1查看 5K关注 0票数 0

我在这个文件中有一个错误:

代码语言:javascript
复制
<?php
// $data and $signature are assumed to contain the data and the signature

$signature = null;
$toSign = "C:/Users/User/Desktop/xampp/htdocs/docum.docx";

$fp = fopen("key.pem", "r");
$priv_key = fread($fp, 8192);
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key);

openssl_sign($toSign, $signature, $pkeyid);

openssl_free_key($pkeyid);
echo($signature);
// fetch public key from certificate and ready it
$fp = fopen("C:/Users/User/Desktop/xampp/htdocs/pubkey.der", "r");
$cert = fread($fp, 8192);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);

// state whether signature is okay or not
$ok = openssl_verify($toSign, $signature, $pubkeyid);
if ($ok == 1) {
    echo "good";
} elseif ($ok == 0) {
    echo "bad";
} else {
    echo "ugly, error checking signature";
}
// free the key from memory
openssl_free_key($pubkeyid);
?>

我怎样才能纠正这个错误?我用文档的私钥计算签名,现在我想测试它。首先,我创建了两个php文件,第一个文件对文档进行了签名,第二个文件发生在ke签名上。我只是不知道如何从第一个documento.Ho的签名,决定把它放在一起尝试.我怎么才能修好?

EN

回答 1

Stack Overflow用户

发布于 2015-12-07 19:11:15

  1. 您确定您的公钥文件短于8192字节吗?如果您只是想将一个文件读入使用file_get_contents()的变量中,那么它就会简单得多。
  2. openssl_get_publickey($cert)回来了什么?
  3. 根据您得到的错误,它看起来像OpenSSL期望的PEM格式化的键,所以您需要转换它。

尝试:

代码语言:javascript
复制
function der2pem($der_data) {
   $pem = chunk_split(base64_encode($der_data), 64, "\n");
   $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
   return $pem;
}

$cert = der2pem(file_get_contents('C:/Users/User/Desktop/xampp/htdocs/pubkey.der'));

if( ! $pubkeyid = openssl_get_publickey($cert) ) {
    throw new \Exception(openssl_error_string());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34140563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档