2024 年 PHP Conference Japan

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

參見

新增註記

使用者貢獻的註記 1 則註記

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

使用這個方法來儲存資料庫中的資料:除非有人
擁有您的私鑰,否則資料庫內容將毫無用處。

此外,使用這個方法將訊息發送給特定個人:取得
他們的公鑰,加密訊息,只有他們才能使用
他們的私鑰來解密。

<?php
echo "來源: $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
"加密後的字串: $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
"解密後的字串: $newsource";
?>
To Top