首页 后端开发 php教程 使用openssl实现rsa非对称加密算法示例_php实例

使用openssl实现rsa非对称加密算法示例_php实例

Jun 07, 2016 pm 05:22 PM
openssl rsa 非对称加密算法

复制代码 代码如下:

/**
 * 使用openssl实现非对称加密
 * @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);
        }

}

//以下是一个简单的测试demo,如果不需要请删除
$rsa = new Rsa('ssl-key');

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

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

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

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


需要注意的是apache要支持OpenSSL
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Nginx如何使用OpenSSL库实现更安全的通信 Nginx如何使用OpenSSL库实现更安全的通信 Jun 10, 2023 pm 01:51 PM

Nginx是一款广泛应用于Web服务器、负载均衡器、反向代理和缓存的软件。在网络传输过程中,数据的加密和安全性越来越受到关注。为了提高通信的安全性,可以使用OpenSSL库来实现SSL/TLS协议,从而保护敏感数据的传输。本文将讲解如何使用Nginx与OpenSSL库实现更安全的通信。安装与配置OpenSSL库首先,需要在服务器上安装OpenSSL库。可以使

用 Python 来实现 RSA 加解密 用 Python 来实现 RSA 加解密 Apr 14, 2023 pm 02:13 PM

昨天看到一篇英文文章[1],展示了如何用 Python 来实现 RSA 算法,代码的逻辑与前文一文搞懂 RSA 算法一样,不太熟悉 RSA 的朋友可以看一下一文搞懂 RSA 算法,里面对什么是 RSA,RSA 的数学原理进行了说明,并举了一个简单的例子,可以说是全知乎最容易读懂 RSA 的文章了(这话来自读者评论)。这篇英文提供的代码我运行了下,发现不能加密中文,于是就修改了下加解密的函数,让其支持中文加解密。今天的文章就分享一下如何用 Python 来实现 RSA 加解密的这一过程,帮助你建立

如何利用PHP和GMP进行大整数的RSA加密和解密算法 如何利用PHP和GMP进行大整数的RSA加密和解密算法 Jul 28, 2023 pm 05:25 PM

如何利用PHP和GMP进行大整数的RSA加密和解密算法RSA加密算法是一种非对称加密算法,广泛应用于数据安全领域。它基于两个特别大的素数和一些简单的数学运算,实现了公钥加密和私钥解密的过程。在PHP语言中,可以通过GMP(GNUMultiplePrecision)库来实现大整数的计算,结合RSA算法实现加密和解密功能。本文将介绍如何利用PHP和GMP库来

如何使用 OpenSSL 生成 MySQL SSL 证书 如何使用 OpenSSL 生成 MySQL SSL 证书 Sep 09, 2023 pm 02:12 PM

如何使用OpenSSL生成MySQLSSL证书简介:MySQL是一种广泛应用的关系型数据库系统,在实际生产环境中使用SSL(SecureSocketsLayer)协议进行加密通信是非常重要的。本文将介绍如何使用OpenSSL工具生成MySQLSSL证书,并提供相应的代码示例。步骤:安装OpenSSL:首先,确保计算机上已安装O

CentOS 7下OpenBLAS安装及CentOS 7 OpenSSL安装 CentOS 7下OpenBLAS安装及CentOS 7 OpenSSL安装 Feb 10, 2024 am 11:45 AM

LINUX作为一个开源操作系统,有着广泛的应用和用户群体,CentOS7是LINUX的一个分支版本,它是基于RedHatEnterpriseLinux(RHEL)源代码构建的,具有高度的稳定性和安全性,在CentOS7上安装和配置OpenBLAS和OpenSSL是许多开发者和系统管理员的常见需求,本文将详细介绍如何在CentOS7上安装和配置OpenBLAS和OpenSSL。OpenBLAS是一个开源的基于BLAS(BasicLinearAlgebraSubprograms)接口的高性能数学库,

如何使用PHP和GMP实现RSA加密和解密算法 如何使用PHP和GMP实现RSA加密和解密算法 Jul 28, 2023 pm 11:54 PM

如何使用PHP和GMP实现RSA加密和解密算法RSA加密算法是一种非对称加密算法,广泛应用于信息安全领域。在实际应用中,常常需要使用编程语言来实现RSA加密和解密算法。PHP是一种常用的服务器端脚本语言,而GMP(GNUMultiplePrecision)是一种高精度数学计算库,可以帮助我们进行RSA算法中需要的大数运算。本文将介绍如何使用PHP和GMP

PHP实现RSA非对称加密技术 PHP实现RSA非对称加密技术 Jun 18, 2023 am 09:34 AM

RSA非对称加密技术是目前最为流行和安全的加密方式之一。PHP作为一种广泛应用的编程语言,在实现RSA加密方面也有着独特的优势。本文将为读者介绍如何使用PHP实现RSA非对称加密技术。一、什么是RSA算法RSA算法是一种非对称加密技术,它通常用于数据加密和数字签名。它的安全性主要基于一个数论难题,即在极短时间内对超大整数进行因数分解的难度。RSA算法的加密流

如何利用Python编写RSA加密算法? 如何利用Python编写RSA加密算法? Sep 20, 2023 pm 01:21 PM

如何利用Python编写RSA加密算法?引言:RSA是一种非对称加密算法,被广泛应用于信息安全领域。在现代通信中,RSA加密算法常用于加密和解密敏感数据。本文将介绍如何使用Python编写RSA加密算法,并提供具体的代码示例。安装Python库在开始编写RSA加密算法之前,需要安装Python的加密库。可以使用以下命令安装:pipinstallrsa生成

See all articles