摘要:使用實現非對稱加密私鑰公鑰保存文件地址公鑰私鑰創建公鑰和私鑰生成私鑰生成公鑰設置私鑰從文件中獲取設置公鑰從文件中獲取數據源用私鑰加密
_keyPath = $path; } } /** * 創建公鑰和私鑰 * */ public function createKey() { $config = [ "config" => "D:MinInstallwampwamp64inphpphp5.6.25extrassslopenssl.cnf", "digest_alg" => "sha512", "private_key_bits" => 4096, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]; // 生成私鑰 $rsa = openssl_pkey_new($config); openssl_pkey_export($rsa, $privKey, NULL, $config); file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . "priv.key", $privKey); $this->_privKey = openssl_pkey_get_public($privKey); // 生成公鑰 $rsaPri = openssl_pkey_get_details($rsa); $pubKey = $rsaPri["key"]; file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . "pub.key", $pubKey); $this->_pubKey = openssl_pkey_get_public($pubKey); } /** 設置私鑰 * @return bool */ public function setupPrivKey() { if (is_resource($this->_privKey)) { return true; } //從文件中獲取 /*$file = $this->_keyPath . DIRECTORY_SEPARATOR . "priv.key"; $privKey = file_get_contents($file);*/ $privKey = $this->_priKeyLink; $this->_privKey = openssl_pkey_get_private($privKey); return true; } /** 設置公鑰 * @return bool */ public function setupPubKey() { //從文件中獲取 /*$file = $this->_keyPath . DIRECTORY_SEPARATOR . "pub.key"; $pubKey = file_get_contents($file);*/ //數據源 $pubKey = $this->_pubKeyLink; $this->_pubKey = openssl_pkey_get_public($pubKey); return true; } /** 用私鑰加密 * @param $data * @return null|string */ public function privEncrypt($data) { if (!is_string($data)) { return null; } $this->setupPrivKey(); $result = openssl_private_encrypt($data, $encrypted, $this->_privKey); if ($result) { return base64_encode($encrypted); } return null; } /** 私鑰解密 * @param $encrypted * @return null */ public function privDecrypt($encrypted) { if (!is_string($encrypted)) { return null; } $this->setupPrivKey(); $encrypted = base64_decode($encrypted); $result = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey); if ($result) { return $decrypted; } return null; } /** 公鑰加密 * @param $data * @return null|string */ public function pubEncrypt($data) { if (!is_string($data)) { return null; } $this->setupPubKey(); $result = openssl_public_encrypt($data, $encrypted, $this->_pubKey); if ($result) { return base64_encode($encrypted); } return null; } /** 公鑰解密 * @param $crypted * @return null */ public function pubDecrypt($crypted) { if (!is_string($crypted)) { return null; } $this->setupPubKey(); $crypted = base64_decode($crypted); $result = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey); if ($result) { return $decrypted; } return null; } /** 私鑰簽名 * @param $data * @return string */ public function priKeySign($data) { if(!is_string($data)) return null; $private_key=openssl_get_privatekey($this->_priKeyLink); $original_str= $data ;//原數據 openssl_sign($original_str,$sign,$private_key); openssl_free_key($private_key); $sign=base64_encode($sign);//最終的簽名 return $sign ; } /** 公鑰驗簽 * @param $sign * @param $data * @return bool */ public function pubKeyCheck($sign,$data) { if(!is_string($sign) || !is_string($data)) return null; $public_key=openssl_get_publickey($this->_pubKeyLink); $sign=base64_decode($sign);//得到的簽名 $original_str=$data; $result=(bool)openssl_verify($original_str,$sign,$public_key); openssl_free_key($public_key); return $result ; } /** * __destruct * */ public function __destruct() { @fclose($this->_privKey); @fclose($this->_pubKey); } } $rsa = new Rsa(); echo "openssl_private_encrypt,openssl_public_decrypt","
"; //私鑰加密,公鑰解密 echo "私鑰加密,公鑰驗簽","
"; echo "待加密數據:testInfo","
"; $pre = $rsa->privEncrypt("testInfo"); echo "加密后的密文:
" . $pre . "
"; $pud = $rsa->pubDecrypt($pre); echo "解密后數據:" . $pud . "
"; echo "
"; //公鑰加密,私鑰解密 echo "openssl_public_encrypt,openssl_private_decrypt","
"; echo "公鑰加密,私鑰驗簽","
"; echo "待加密數據:ssh-test","
"; $pue = $rsa->pubEncrypt("ssh-test"); echo "加密后的密文:","
" . $pue . "
"; $prd = $rsa->privDecrypt($pue); echo "解密后數據:" . $prd; echo "
";echo "
"; echo "openssl_sign,openssl_verify","
"; echo "私鑰簽名,公鑰驗簽","
"; echo "待加密數據:test=32","
"; $pre = $rsa->priKeySign("test=32"); echo "加密后的密文:","
" . $pre . "
"; $pud = $rsa->pubKeyCheck($pre,"test=32"); echo "是否解密成功:" . $pud . "
"; echo "
";
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30984.html
摘要:非對稱加密與對稱加密相對的是非對稱加密,非對稱加密的核心思想是使用一對相對的密匙,分為公匙和私匙,私匙自己安全保存,而將公匙公開。 引言 互聯網的發展史上,安全性一直是開發者們相當重視的一個主題,為了實現數據傳輸安全,我們需要保證:數據來源(非偽造請求)、數據完整性(沒有被人修改過)、數據私密性(密文,無法直接讀取)等。雖然現在已經有SSL/TLS協議實現的HTTPS協議,但是因在客戶...
摘要:與對稱加密不同的是,非對稱加密和解密使用的是不同的密鑰,其中一個對外公開作為公鑰,另一個只有所有者擁有,稱為私鑰。中提供基于算法的擴展可實現對數據的非對稱加密。 與對稱加密不同的是,非對稱加密和解密使用的是不同的密鑰,其中一個對外公開作為公鑰,另一個只有所有者擁有,稱為私鑰。用私鑰加密的信息只有公鑰才能解開,或者反之用弓腰加密的信息只有私鑰才能解開。常用的非對稱加密有RSA算法,RSA...
摘要:非對稱加密提交表單到首先用工具生成一對非對稱密鑰然后在前端引入庫用于非對稱加密再綁定的事件對表單需加密數據進行加密處理然后就可以在后端中通過方法解析傳輸過來的加密數據了 非對稱加密提交表單到PHP 首先用openssl工具生成一對RSA非對稱密鑰 openssl genrsa -out rsa_1024_priv.pem 1024 openssl rsa -pubout -in rsa...
摘要:非對稱加密提交表單到首先用工具生成一對非對稱密鑰然后在前端引入庫用于非對稱加密再綁定的事件對表單需加密數據進行加密處理然后就可以在后端中通過方法解析傳輸過來的加密數據了 非對稱加密提交表單到PHP 首先用openssl工具生成一對RSA非對稱密鑰 openssl genrsa -out rsa_1024_priv.pem 1024 openssl rsa -pubout -in rsa...
摘要:非對稱加密至于什么是非對稱加密,這里就不說啦,大家谷歌去吧。這里說明的是,最近在做一個對外的充值加密服務,那么涉及到這個加密的處理,中間遇到幾個小問題,所以記錄下,方便自己下次查閱。 非對稱加密 至于什么是非對稱加密,這里就不說啦,大家谷歌去吧。這里說明的是,最近在做一個對外的充值加密服務,那么涉及到這個加密的處理,中間遇到幾個小問題,所以記錄下,方便自己下次查閱。 詳細代碼 測試...
閱讀 2784·2023-04-25 18:06
閱讀 2576·2021-11-22 09:34
閱讀 1684·2021-11-08 13:16
閱讀 1302·2021-09-24 09:47
閱讀 3049·2019-08-30 15:44
閱讀 2773·2019-08-29 17:24
閱讀 2584·2019-08-23 18:37
閱讀 2433·2019-08-23 16:55