PHP Conference Japan 2024

openssl_private_decrypt

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

openssl_private_decrypt使用私钥解密数据

描述

openssl_private_decrypt(
    string $data,
    #[\SensitiveParameter] string &$decrypted_data,
    #[\SensitiveParameter] OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key,
    int $padding = OPENSSL_PKCS1_PADDING
): bool

openssl_private_decrypt() 解密先前通过 openssl_public_encrypt() 加密的 data,并将结果存储到 decrypted_data 中。

例如,您可以使用此函数解密仅供您访问的数据。

参数

data

decrypted_data

private_key

private_key 必须是与用于加密数据的公钥对应的私钥。

padding

padding 可以是 OPENSSL_PKCS1_PADDINGOPENSSL_SSLV23_PADDINGOPENSSL_PKCS1_OAEP_PADDINGOPENSSL_NO_PADDING 之一。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.0.0 private_key 现在接受 OpenSSLAsymmetricKeyOpenSSLCertificate 实例;以前,它接受类型为 OpenSSL keyOpenSSL X.509资源

参见

添加注释

用户贡献的注释 1 个注释

wfredkNOSPAM at L5DevelopmentNOSPAM dot com
22 年前
使用公钥加密,使用私钥解密。

将其用于在数据库中存储内容:除非有人
拥有您的私钥,否则数据库内容毫无用处。

此外,将其用于发送给特定个人:获取
他们的公钥,加密消息,只有他们可以使用
他们的私钥对其进行解码。

<?php
echo "Source: $source";
$fp=fopen("/path/to/certificate.crt","r");
$pub_key=fread($fp,8192);
fclose($fp);
openssl_get_publickey($pub_key);
/*
* 注意:这里您使用 $pub_key 值(已转换,我猜)
*/
openssl_public_encrypt($source,$crypttext,$pub_key);
echo
"String crypted: $crypttext";

$fp=fopen("/path/to/private.key","r");
$priv_key=fread($fp,8192);
fclose($fp);
// 如果您的密钥已编码(建议),则需要 $passphrase
$res = openssl_get_privatekey($priv_key,$passphrase);
/*
* 注意:这里您使用返回的资源值
*/
openssl_private_decrypt($crypttext,$newsource,$res);
echo
"String decrypt : $newsource";
?>
To Top