ホームページ バックエンド開発 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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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

昨日、Python を使用して RSA アルゴリズムを実装する方法を示した英語の記事 [1] を見ました。コードのロジックは前の記事「Understanding the RSA Algorithm」と同じです。RSA に詳しくない友人は、「Understanding the RSA」という記事を読むことができます。 「RSA アルゴリズム」では、「RSA とは何か」、RSA の数学的原理が説明され、簡単な例が示されており、Quanzhihu で RSA を理解するのに最も簡単な記事と言えます (これは読者のコメントから来ています)。英語で提供されたコードを実行したところ、中国語を暗号化できないことが判明したため、中国語の暗号化と復号化をサポートするように暗号化と復号化の関数を変更しました。今日の記事では、Python を使用して RSA 暗号化および復号化プロセスを実装し、暗号化を確立する方法を紹介します。

PHP と GMP を使用して大きな整数の RSA 暗号化および復号化アルゴリズムを実行する方法 PHP と GMP を使用して大きな整数の RSA 暗号化および復号化アルゴリズムを実行する方法 Jul 28, 2023 pm 05:25 PM

PHP と GMP を使用して大きな整数の RSA 暗号化および復号化アルゴリズムを実行する方法 RSA 暗号化アルゴリズムは、データ セキュリティの分野で広く使用されている非対称暗号化アルゴリズムです。これは、2 つの特に大きな素数といくつかの単純な数学演算に基づいて公開キー暗号化と秘密キー復号化のプロセスを実装します。 PHP言語では、GMP(GNUMultiplePrecision)ライブラリにより大きな整数の計算を実現でき、RSAアルゴリズムを組み合わせることで暗号化・復号化機能を実現できます。この記事では、PHP および GMP ライブラリを使用して、

OpenSSL を使用して MySQL SSL 証明書を生成する方法 OpenSSL を使用して MySQL SSL 証明書を生成する方法 Sep 09, 2023 pm 02:12 PM

OpenSSL を使用して MySQL SSL 証明書を生成する方法の紹介: MySQL は広く使用されているリレーショナル データベース システムですが、実際の運用環境では暗号化通信に SSL (SecureSocketsLayer) プロトコルを使用することが非常に重要です。この記事では、OpenSSL ツールを使用して MySQL SSL 証明書を生成する方法を紹介し、対応するコード例を示します。手順: OpenSSL をインストールする: まず、コンピューターに OpenSSL がインストールされていることを確認します。

CentOS 7 での OpenBLAS インストールおよび CentOS 7 OpenSSL インストール CentOS 7 での OpenBLAS インストールおよび CentOS 7 OpenSSL インストール Feb 10, 2024 am 11:45 AM

オープンソースのオペレーティング システムである LINUX は、幅広いアプリケーションとユーザー グループに利用されており、CentOS7 は LINUX のブランチ バージョンであり、RedHat Enterprise Linux (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の使い方を紹介します。

Python を使用して RSA 暗号化アルゴリズムを作成するにはどうすればよいですか? Python を使用して RSA 暗号化アルゴリズムを作成するにはどうすればよいですか? Sep 20, 2023 pm 01:21 PM

Python を使用して RSA 暗号化アルゴリズムを作成するにはどうすればよいですか?はじめに: RSA は、情報セキュリティの分野で広く使用されている非対称暗号化アルゴリズムです。最新の通信では、機密データの暗号化と復号化に RSA 暗号化アルゴリズムが一般的に使用されています。この記事では、Python を使用して RSA 暗号化アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。 Python ライブラリのインストール RSA 暗号化アルゴリズムの作成を開始する前に、Python 暗号化ライブラリをインストールする必要があります。次のコマンドを使用してインストールできます: pipinstallrsa generated

PHP は RSA 非対称暗号化テクノロジーを実装しています PHP は RSA 非対称暗号化テクノロジーを実装しています Jun 18, 2023 am 09:34 AM

RSA 非対称暗号化テクノロジは、現在最も一般的で安全な暗号化方式の 1 つです。広く使用されているプログラミング言語である PHP には、RSA 暗号化の実装において独自の利点もあります。この記事では、PHP を使用して RSA 非対称暗号化テクノロジを実装する方法を読者に紹介します。 1. RSA アルゴリズムとは何ですか? RSA アルゴリズムは非対称暗号化技術であり、通常、データの暗号化とデジタル署名に使用されます。そのセキュリティは主に数論の問題、つまり非常に大きな整数を非常に短時間で因数分解することの難しさに基づいています。 RSAアルゴリズム暗号化ストリーム

See all articles