国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP實現非對稱加密

Euphoria / 494人閱讀

摘要:非對稱加密至于什么是非對稱加密,這里就不說啦,大家谷歌去吧。這里說明的是,最近在做一個對外的充值加密服務,那么涉及到這個加密的處理,中間遇到幾個小問題,所以記錄下,方便自己下次查閱。

非對稱加密

至于什么是非對稱加密,這里就不說啦,大家谷歌去吧。這里說明的是,最近在做一個對外的充值加密服務,那么涉及到這個加密的處理,中間遇到幾個小問題,所以記錄下,方便自己下次查閱。

詳細代碼
_keyPath = $path;
    }

    /**
     * 創建公鑰和私鑰
     * 
     */
    public function createKey()
    {
        $config = [
            "config" => "D:wampinapacheapache2.4.9confopenssl.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);
    }

    /**
     * 設置私鑰
     * 
     */
    public function setupPrivKey()
    {
        if (is_resource($this->_privKey)) {
            return true;
        }
        $file = $this->_keyPath . DIRECTORY_SEPARATOR . "priv.key";
        $privKey = file_get_contents($file);
        $this->_privKey = openssl_pkey_get_private($privKey);
        return true;
    }

    /**
     * 設置公鑰
     * 
     */
    public function setupPubKey()
    {
        if (is_resource($this->_pubKey)) {
            return true;
        }
        $file = $this->_keyPath . DIRECTORY_SEPARATOR . "pub.key";
        $pubKey = file_get_contents($file);
        $this->_pubKey = openssl_pkey_get_public($pubKey);
        return true;
    }

    /**
     * 用私鑰加密
     * 
     */
    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;
    }

    /**
     * 私鑰解密
     * 
     */
    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;
    }

    /**
     * 公鑰加密
     * 
     */
    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;
    }

    /**
     * 公鑰解密
     * 
     */
    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;
    }

    /**
     * __destruct
     * 
     */
    public function __destruct() {
        @fclose($this->_privKey);
        @fclose($this->_pubKey);
    }
}

?> 
測試
$rsa = new Rsa("ssl-key");
//私鑰加密,公鑰解密
echo "待加密數據:segmentfault.com
";
$pre = $rsa->privEncrypt("segmentfault.com");
echo "加密后的密文:
" . $pre . "
";
$pud = $rsa->pubDecrypt($pre);
echo "解密后數據:" . $pud . "
";



//公鑰加密,私鑰解密
echo "待加密數據:segmentfault.com
";
$pue = $rsa->pubEncrypt("segmentfault.com");
echo "加密后的密文:
" . $pue . "
";
$prd = $rsa->privDecrypt($pue);
echo "解密后數據:" . $prd;
重要問題

這里特別要注意的是在配置中要指定openssl.cnf的文件地址,或者設置個OPENSSL_CONF全局變量就可以了。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21206.html

相關文章

  • 為你的PHP程序選擇合適的密碼庫(初稿)

    摘要:我們不會提及任何糟糕的密碼庫的。僅對而言如果你一定要安裝對稱密鑰加密,請使用上述的的密碼庫。的密碼庫為你提供了認證加密,而的實施并不會驗證密文。當前的最佳密碼庫之一是內建的。這種散列算法對的編程者或企業來說都是穩定有效的。 如果本文中的術語讓你感到疑惑,請先參閱密碼學術語及概念一文。 密碼學不是魔術。加密一個應用程序并不能保證它在襲擊下的安全(特別是在你沒有設置驗證密文的情況下)。但如...

    岳光 評論0 收藏0
  • PHP的openssl加密擴展使用小結

    摘要:非對稱加密與對稱加密相對的是非對稱加密,非對稱加密的核心思想是使用一對相對的密匙,分為公匙和私匙,私匙自己安全保存,而將公匙公開。 引言 互聯網的發展史上,安全性一直是開發者們相當重視的一個主題,為了實現數據傳輸安全,我們需要保證:數據來源(非偽造請求)、數據完整性(沒有被人修改過)、數據私密性(密文,無法直接讀取)等。雖然現在已經有SSL/TLS協議實現的HTTPS協議,但是因在客戶...

    dockerclub 評論0 收藏0
  • 加密算法之對稱加密

    摘要:算法公鑰加密算法是年由羅納德李維斯特阿迪薩莫爾和倫納德阿德曼一起提出的。是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被推薦為公鑰數據加密標準。 上篇文章介紹了對稱加密的原理,但是它的最大問題就是加密和解密的密鑰是相同的,并且不能保證密鑰能安全的送到雙方手里,即使安全的送到雙方手里,免不了內部會有臥底的存在 非對稱加密 既然有對稱加密,那么自然會聯想到非...

    dongxiawu 評論0 收藏0
  • 聊聊加密那點事——PHP加密最佳實踐

    摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...

    lcodecorex 評論0 收藏0
  • 聊聊加密那點事——PHP加密最佳實踐

    摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...

    Mr_zhang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<