如何使用RSA 2048和摘要sha256签名文件数据?

时间:2019-07-15 07:13:23

标签: php rsa phpseclib

我正在通过PHPSECLIB库在PHP中生成RSA签名。根据说明,签名摘要必须为sha256。生成密钥时是否应设置摘要?

我通过打击代码生成了Pub / Pri密钥:(应该为2048和.perm)

$new_key_pair = openssl_pkey_new(array(
    "private_key_bits" => 2048,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
));
openssl_pkey_export($new_key_pair, $private_key_pem);
$details = openssl_pkey_get_details($new_key_pair);
$public_key_pem = $details['key'];
file_put_contents('private.pem', $private_key_pem);
file_put_contents('public.pem', $public_key_pem);

我通过打击代码对数据签名:

$file_name = "x.json";
$sign_file = "signed/" . $file_name . ".sign";
$data = file_get_contents('files/' . $file_name);
$privatekey = file_get_contents('private.pem');
$rsa = new Crypt_RSA();
$rsa->loadKey($privatekey);
$rsa->setHash('sha256');
$signature = $rsa->sign($data);
file_put_contents($sign_file, $signature);
exit("signed.");

并通过

进行验证
$file_name = "x.json";
$sign_file = "signed/" . $file_name . ".sign";
$publickey = file_get_contents('public.pem');
$data = file_get_contents('files/' . $file_name);
$signature = file_get_contents($sign_file);
$rsa = new Crypt_RSA();
$rsa->setHash('sha256');
$rsa->loadKey($publickey);
$verify = false;
try {
        $verify = $rsa->verify($data, $signature);
} catch (Exception $ex) {
    $verify = false;
}
echo "verify: " . (($verify) ? "true" : "false") . "<br>";
exit("finished.");

如何设置摘要?签名过程正确吗?

0 个答案:

没有答案