您好,欢迎访问一九零五行业门户网

php和openssl实现非对称加密的代码示例

本篇文章给大家带来的内容是关于php和openssl实现非对称加密的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
<?phpnamespace myobjsummary;/** * 使用openssl实现非对称加密 */class rsa{ /** * 私钥 * */ private $_privkey; /** * 公钥 * */ private $_pubkey; /** 保存文件地址 * @var */ private $_keypath; /** 公钥 * @var string */ private $_pubkeylink = "-----begin public key-----migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqcf4sz1eu4xgleik9aiu4+rfgltk1gmnhuytotk3kbzpoy2xor5sqirxbyniagwbvolpwdacvjoqjfek6xgvl17745uz7rubcziw62ocgx3swidaqab-----end public key-----"; /**私钥 * @var string */ private $_prikeylink = "-----begin rsa private key-----miicxaibaakbgqcf4sz1eu4xgleik9aiu4+rfgltk1gmnhuytotk3kbzpoy2xor5sqirxbyniagwbvolpwdacvjoqjfek6xgvl17745uwnsw3ekll1qm+w2z5khnenpglwxkxspmfekt1aj3te0ct652scr42coca/ld2mgkz7rubcziw62ocgx3swidaqabaogahinbvu6fx5vdpzwjxdnd42gq3bp9fxzelj9ebso61+b2utuqiw6dbca2axigunlqyitif7raoarn09ejdilfmywrbxagnedsnxwry/imrtkatv+dlnyfdvrizsn+/9l3hqxkhlsqtc4v7o1swam9gw2vjb3x432bjzbgqcyploecqqc7unvquzyt+sumpstrejt85krukgefwyqdji+bdaxhv9xz3piswsavw87zfrpbkcwbtimsh38onkgahtuye08xakeatvjx7t05tivuspcsgabxoabkrkzpcy5qqixtt3oigvcmuz41nbdmexeot+txbgwg0qns7p5bwkrxfcfjjonkiwjaubcitfzxpqqajlo4aroq8kprad4xa+ovpkl7dec9tb4licv773rrnet5yudx1sdpizg2rr0grmmtgyhk0pftcqjbai8iuv2vl3fmbi4sgwwn/lpsezkudpbh0gmrcso4npofxk8=-----end rsa private key-----"; /** * rsa constructor. * @param string $path */ public function __construct($path='') { if (!empty($path)) { $this->_keypath = $path;        }    }    /**     * 创建公钥和私钥     *      */    public function createkey()    {        $config = [            config => 'd:\min\install\wamp\wamp64\bin\php\php5.6.25\extras\ssl\openssl.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,<br />;//私钥加密,公钥解密echo 私钥加密,公钥验签,<br />;echo 待加密数据:testinfo,<br />;$pre = $rsa->privencrypt(testinfo);echo 加密后的密文:<br /> . $pre . <br />;$pud = $rsa->pubdecrypt($pre);echo 解密后数据: . $pud . <br />;echo <hr>;//公钥加密,私钥解密echo openssl_public_encrypt,openssl_private_decrypt,<br />;echo 公钥加密,私钥验签,<br />;echo 待加密数据:ssh-test,<br />;$pue = $rsa->pubencrypt(ssh-test);echo 加密后的密文:,<br /> . $pue . <br />;$prd = $rsa->privdecrypt($pue);echo 解密后数据: . $prd;echo <hr>;echo <hr>;echo openssl_sign,openssl_verify,<br />;echo 私钥签名,公钥验签,<br />;echo 待加密数据:test=32,<br />;$pre = $rsa->prikeysign('test=32');echo 加密后的密文:,<br /> . $pre . <br />;$pud = $rsa->pubkeycheck($pre,'test=32');echo 是否解密成功: . $pud . <br />;echo <hr>;
以上就是php和openssl实现非对称加密的代码示例的详细内容。
其它类似信息

推荐信息