各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

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

管理员 2023-09-05
PHP
135

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

内容导读

收集整理的这篇技术教程文章主要介绍了php和openssl实现非对称加密的代码示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5741字,纯文字阅读大概需要9分钟

内容图文

本篇文章给大家带来的内容是关于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:MinInstallwampwamp64binphpphp5.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","<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实现非对称加密的代码示例的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php和openssl实现非对称加密的代码示例全部内容,希望文章能够帮你解决php和openssl实现非对称加密的代码示例所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部