成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP實(shí)現(xiàn)非對(duì)稱加密

Euphoria / 502人閱讀

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

非對(duì)稱加密

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

詳細(xì)代碼
_keyPath = $path;
    }

    /**
     * 創(chuàng)建公鑰和私鑰
     * 
     */
    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);
    }

    /**
     * 設(shè)置私鑰
     * 
     */
    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;
    }

    /**
     * 設(shè)置公鑰
     * 
     */
    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);
    }
}

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



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

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21206.html

相關(guān)文章

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

    摘要:我們不會(huì)提及任何糟糕的密碼庫(kù)的。僅對(duì)而言如果你一定要安裝對(duì)稱密鑰加密,請(qǐng)使用上述的的密碼庫(kù)。的密碼庫(kù)為你提供了認(rèn)證加密,而的實(shí)施并不會(huì)驗(yàn)證密文。當(dāng)前的最佳密碼庫(kù)之一是內(nèi)建的。這種散列算法對(duì)的編程者或企業(yè)來(lái)說(shuō)都是穩(wěn)定有效的。 如果本文中的術(shù)語(yǔ)讓你感到疑惑,請(qǐng)先參閱密碼學(xué)術(shù)語(yǔ)及概念一文。 密碼學(xué)不是魔術(shù)。加密一個(gè)應(yīng)用程序并不能保證它在襲擊下的安全(特別是在你沒(méi)有設(shè)置驗(yàn)證密文的情況下)。但如...

    岳光 評(píng)論0 收藏0
  • PHP的openssl加密擴(kuò)展使用小結(jié)

    摘要:非對(duì)稱加密與對(duì)稱加密相對(duì)的是非對(duì)稱加密,非對(duì)稱加密的核心思想是使用一對(duì)相對(duì)的密匙,分為公匙和私匙,私匙自己安全保存,而將公匙公開(kāi)。 引言 互聯(lián)網(wǎng)的發(fā)展史上,安全性一直是開(kāi)發(fā)者們相當(dāng)重視的一個(gè)主題,為了實(shí)現(xiàn)數(shù)據(jù)傳輸安全,我們需要保證:數(shù)據(jù)來(lái)源(非偽造請(qǐng)求)、數(shù)據(jù)完整性(沒(méi)有被人修改過(guò))、數(shù)據(jù)私密性(密文,無(wú)法直接讀?。┑?。雖然現(xiàn)在已經(jīng)有SSL/TLS協(xié)議實(shí)現(xiàn)的HTTPS協(xié)議,但是因在客戶...

    dockerclub 評(píng)論0 收藏0
  • 加密算法之對(duì)稱加密

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

    dongxiawu 評(píng)論0 收藏0
  • 聊聊加密那點(diǎn)事——PHP加密最佳實(shí)踐

    摘要:所謂對(duì)稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點(diǎn)之一。非對(duì)稱加密算法由于對(duì)稱加密在通信加密領(lǐng)域的缺陷,年和提出了非對(duì)稱加密的概念。非對(duì)稱加密,其主要缺點(diǎn)之一就是慢,適合加密少量數(shù)據(jù)。 1. 加密的目的 加密不同于密碼,加密是一個(gè)動(dòng)作或者過(guò)程,其目的就是將一段明文信息(人類或機(jī)器可以直接讀懂的信息)變?yōu)橐欢慰瓷先](méi)有任何意義的字符,必須通過(guò)事先約定的解密規(guī)則才能將...

    lcodecorex 評(píng)論0 收藏0
  • 聊聊加密那點(diǎn)事——PHP加密最佳實(shí)踐

    摘要:所謂對(duì)稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點(diǎn)之一。非對(duì)稱加密算法由于對(duì)稱加密在通信加密領(lǐng)域的缺陷,年和提出了非對(duì)稱加密的概念。非對(duì)稱加密,其主要缺點(diǎn)之一就是慢,適合加密少量數(shù)據(jù)。 1. 加密的目的 加密不同于密碼,加密是一個(gè)動(dòng)作或者過(guò)程,其目的就是將一段明文信息(人類或機(jī)器可以直接讀懂的信息)變?yōu)橐欢慰瓷先](méi)有任何意義的字符,必須通過(guò)事先約定的解密規(guī)則才能將...

    Mr_zhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<