openssl_private_decrypt

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

openssl_private_decrypt使用私钥解密数据

描述

openssl_private_decrypt(
    字符串 $data,
    #[\SensitiveParameter] 字符串 &$decrypted_data,
    #[\SensitiveParameter] OpenSSLAsymmetricKey|OpenSSLCertificate|数组|字符串 $private_key,
    整数 $padding = OPENSSL_PKCS1_PADDING
): 布尔值

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资源

参见

添加注释

用户贡献的注释 3 个注释

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";
?>
匿名
3 年前
<?php

// 在控制台中生成密钥:
// $ openssl genrsa -out private_key 8192
// $ openssl rsa -in private_key -out public_key.pem -pubout -outform PEM

// 测试数据
$data = 'Hello world';

// 使用公钥加密数据
$publicKey = file_get_contents('public_key.pem');
$encrypted = null;

openssl_public_encrypt($data, $encrypted, $publicKey);

echo
'Encrypted data', PHP_EOL;
echo
base64_encode($encrypted), PHP_EOL;

echo
PHP_EOL;

// 使用私钥解密数据
$privateKey = file_get_contents('private_key');
$decrypted = null;

openssl_private_decrypt($encrypted, $decrypted, $privateKey);

echo
'Decrypted data', PHP_EOL;
echo
$decrypted, PHP_EOL;
tjusongchao at gmail dot com
9 年前
当然,您必须将 openssl 扩展添加到您的 php 环境中。
To Top