我花了很長時間尋找使用私鑰/公鑰系統進行非同步加密/解密的說明,而且我必須使用它來建立使用定期計費的信用卡模組。
使用普通的「同步」或雙向加密來做這件事是很愚蠢的,所以整個 mcrypt 函式庫都派不上用場。
但事實證明,OpenSSL 非常容易使用……然而它的文件卻非常稀少,以至於看起來會非常困難。
所以我分享我這一天的研究成果——希望對您有所幫助!
<?php
if (isset($_SERVER['HTTPS']) )
{
echo "安全連線:此頁面正在透過安全連線存取。<br><br>";
}
else
{
echo "非安全連線:此頁面正在透過非安全連線存取。<br><br>";
}
$res=openssl_pkey_new();
openssl_pkey_export($res, $privatekey);
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
echo "私鑰:<BR>$privatekey<br><br>公鑰:<BR>$publickey<BR><BR>";
$cleartext = '1234 5678 9012 3456';
echo "明文:<br>$cleartext<BR><BR>";
openssl_public_encrypt($cleartext, $crypttext, $publickey);
echo "加密文字:<br>$crypttext<BR><BR>";
openssl_private_decrypt($crypttext, $decrypted, $privatekey);
echo "解密文字:<BR>$decrypted<br><br>";
?>
非常感謝文件中其他貢獻者的協助,讓這件事變得更容易。
請注意,您只需要使用這些函式產生金鑰一次 — 將您的私鑰離線儲存以進行解密,並將您的公鑰放在您的腳本/設定檔中。如果您的資料遭到入侵,您不用擔心加密的資料或公鑰,只有私鑰和明文才真正重要。
祝您好運!