最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用openssl實(shí)現(xiàn)rsa非對(duì)稱加密算法示例

 更新時(shí)間:2014年01月24日 15:28:53   作者:  
這篇文章主要介紹了使用openssl實(shí)現(xiàn)rsa非對(duì)稱加密算法的示例,大家參考使用吧

復(fù)制代碼 代碼如下:

<?php
/**
 * 使用openssl實(shí)現(xiàn)非對(duì)稱加密
 * @since 2010-07-08
 */
class Rsa
{
    /**
     * private key
     */
        private $_privKey;

        /**
         * public key
         */
        private $_pubKey;

        /**
         * the keys saving path
         */
        private $_keyPath;

        /**
         * the construtor,the param $path is the keys saving path
         */
        public function __construct($path)
        {
                if(empty($path) || !is_dir($path)){
                        throw new Exception('Must set the keys save path');
                }

                $this->_keyPath = $path;
        }

        /**
         * create the key pair,save the key to $this->_keyPath
         */
        public function createKey()
        {
                $r = openssl_pkey_new();
                openssl_pkey_export($r, $privKey);
                file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key', $privKey);
                $this->_privKey = openssl_pkey_get_public($privKey);

                $rp = openssl_pkey_get_details($r);
                $pubKey = $rp['key'];
                file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR .  'pub.key', $pubKey);
                $this->_pubKey = openssl_pkey_get_public($pubKey);
        }

        /**
         * setup the private key
         */
        public function setupPrivKey()
        {
                if(is_resource($this->_privKey)){
                        return true;
                }
                $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';
                $prk = file_get_contents($file);
                $this->_privKey = openssl_pkey_get_private($prk);
                return true;
        }

        /**
         * setup the public key
         */
        public function setupPubKey()
        {
                if(is_resource($this->_pubKey)){
                        return true;
                }
                $file = $this->_keyPath . DIRECTORY_SEPARATOR .  'pub.key';
                $puk = file_get_contents($file);
                $this->_pubKey = openssl_pkey_get_public($puk);
                return true;
        }

        /**
         * encrypt with the private key
         */
        public function privEncrypt($data)
        {
                if(!is_string($data)){
                        return null;
                }

                $this->setupPrivKey();

                $r = openssl_private_encrypt($data, $encrypted, $this->_privKey);
                if($r){
                        return base64_encode($encrypted);
                }
                return null;
        }

        /**
         * decrypt with the private key
         */
        public function privDecrypt($encrypted)
        {
                if(!is_string($encrypted)){
                        return null;
                }

                $this->setupPrivKey();

                $encrypted = base64_decode($encrypted);

                $r = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);
                if($r){
                        return $decrypted;
                }
                return null;
        }

        /**
         * encrypt with public key
         */
        public function pubEncrypt($data)
        {
                if(!is_string($data)){
                        return null;
                }

                $this->setupPubKey();

                $r = openssl_public_encrypt($data, $encrypted, $this->_pubKey);
                if($r){
                        return base64_encode($encrypted);
                }
                return null;
        }

        /**
         * decrypt with the public key
         */
        public function pubDecrypt($crypted)
        {
                if(!is_string($crypted)){
                        return null;
                }

                $this->setupPubKey();

                $crypted = base64_decode($crypted);

                $r = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);
                if($r){
                        return $decrypted;
                }
                return null;
        }

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

}

//以下是一個(gè)簡(jiǎn)單的測(cè)試demo,如果不需要請(qǐng)刪除
$rsa = new Rsa('ssl-key');

//私鑰加密,公鑰解密
echo 'source:我是老鱉<br />';
$pre = $rsa->privEncrypt('我是老鱉');
echo 'private encrypted:<br />' . $pre . '<br />';

$pud = $rsa->pubDecrypt($pre);
echo 'public decrypted:' . $pud . '<br />';

//公鑰加密,私鑰解密
echo 'source:干IT的<br />';
$pue = $rsa->pubEncrypt('干IT的');
echo 'public encrypt:<br />' . $pue . '<br />';

$prd = $rsa->privDecrypt($pue);
echo 'private decrypt:' . $prd;
?>


需要注意的是apache要支持OpenSSL

相關(guān)文章

  • 解決tp5在nginx下修改配置訪問(wèn)的問(wèn)題

    解決tp5在nginx下修改配置訪問(wèn)的問(wèn)題

    今天小編就為大家分享一篇解決tp5在nginx下修改配置訪問(wèn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • php的sprintf函數(shù)的用法 控制浮點(diǎn)數(shù)格式

    php的sprintf函數(shù)的用法 控制浮點(diǎn)數(shù)格式

    這篇文章主要介紹了php的sprintf函數(shù)的用法,需要的朋友可以參考下
    2014-02-02
  • md5 16位二進(jìn)制與32位字符串相互轉(zhuǎn)換示例

    md5 16位二進(jìn)制與32位字符串相互轉(zhuǎn)換示例

    密碼很多時(shí)候都會(huì)用 md5保存,并且很多時(shí)候都是16位二進(jìn)制格式的md5,php 里面 md5($str, true) 可以很方便的獲取。更多時(shí)候md5結(jié)果是一組32個(gè)字符組成的字符串,其實(shí)轉(zhuǎn)換很簡(jiǎn)單
    2013-12-12
  • Laravel框架生命周期與原理分析

    Laravel框架生命周期與原理分析

    這篇文章主要介紹了Laravel框架生命周期與原理,結(jié)合實(shí)例形式總結(jié)分析了Laravel框架針對(duì)用戶請(qǐng)求響應(yīng)的完整運(yùn)行周期、流程、原理,需要的朋友可以參考下
    2018-06-06
  • openflashchart 2.0 簡(jiǎn)單案例php版

    openflashchart 2.0 簡(jiǎn)單案例php版

    openflashchart是一種比較實(shí)用的圖標(biāo)呈現(xiàn)插件,而且是開(kāi)源的
    2012-05-05
  • YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法示例

    YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法示例

    這篇文章主要介紹了YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法,結(jié)合實(shí)例形式分析了YII2框架表單提交與文件上傳相關(guān)操作技巧,需要的朋友可以參考下
    2020-03-03
  • 使用PHP抓取微博數(shù)據(jù)實(shí)現(xiàn)demo及原理解析

    使用PHP抓取微博數(shù)據(jù)實(shí)現(xiàn)demo及原理解析

    這篇文章主要為大家介紹了使用PHP抓取微博數(shù)據(jù)實(shí)現(xiàn)demo及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 最新評(píng)論

    喀喇沁旗| 广东省| 广州市| 莆田市| 邓州市| 连平县| 澄城县| SHOW| 科技| 纳雍县| 慈溪市| 于田县| 吉林省| 射洪县| 咸丰县| 东乌| 凌云县| 平阴县| 霍林郭勒市| 龙海市| 肇州县| 拜泉县| 辽宁省| 颍上县| 万州区| 商都县| 两当县| 铁力市| 延边| 兴仁县| 武冈市| 那曲县| 中江县| 怀化市| 青神县| 潼关县| 遂溪县| 翁牛特旗| 屏东县| 仁怀市| 乌兰浩特市|