ホームページ >バックエンド開発 >PHPチュートリアル >PHPで暗号化および復号化するにはどうすればよいですか? PHP の暗号化および復号化方法

PHPで暗号化および復号化するにはどうすればよいですか? PHP の暗号化および復号化方法

青灯夜游
青灯夜游転載
2018-11-22 13:54:328515ブラウズ

この記事の内容は、PHP を暗号化および復号化する方法を紹介することです。 PHP の暗号化および復号化方法。一定の参考値があるので、困っている友達は参考にしていただければ幸いです。

機密データの送信を伴うネットワーク送信データのセキュリティを確保するには、ネットワーク上で送信する前にデータを事前に暗号化することが最善です。データは相手側からアクセス可能です。復号化されており、鍵 (公開鍵または秘密鍵) を使用して復号化する必要があります。鍵 (公開鍵または秘密鍵) を持たない人は、暗号化されたデータを取得したとしても復号化できません。

この記事では、対称暗号化では AES 暗号化アルゴリズム、非対称暗号化では RSA 暗号化アルゴリズムを主に紹介します。 [関連ビデオチュートリアルの推奨事項: PHP チュートリアル ]

1. 対称暗号化

単一キー暗号化を使用した暗号化システム方式では、情報の暗号化と復号化の両方に同じキーを使用できます。この暗号化方式は対称暗号化と呼ばれ、単一キー暗号化とも呼ばれます。

対称暗号化アルゴリズムで一般的に使用されるアルゴリズムには、DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES などがあります。

AES 暗号化アルゴリズム

暗号化における Advanced Encryption Standard (AES) は、ラインダール暗号化方式とも呼ばれ、アメリカの A ブロック暗号化標準です。連邦政府によって採用されました。この標準はオリジナルの DES を置き換えるために使用され、多くの関係者によって分析され、世界中で広く使用されています。 2006 年、Advanced Encryption Standard は、対称キー暗号化の最も人気のあるアルゴリズムの 1 つになりました。

PHP の OpenSSL 拡張機能は、AES 暗号化アルゴリズムを実装しました。OpenSSL 拡張機能が提供するメソッドを使用してデータを暗号化および復号化できます。PHP はバージョン 7.2 で MCrypt 暗号化を完全に削除しました。PHP マニュアルは 7.1 に移行されました。このページには、OpenSSL を使用して MCrypt を置き換えるという代替案が示されています。

PHP AES 実装 (暗号化、復号化)

PHP 実装コード:

class AES
{
    //设置AES秘钥
    private static $aes_key = 'bUYJ3nTV6VBasdJF'; //此处填写前后端共同约定的秘钥

    /**
     * 加密
     * @param string $str    要加密的数据
     * @return bool|string   加密后的数据
     */
    static public function encrypt($str) {

        $data = openssl_encrypt($str, 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        $data = base64_encode($data);

        return $data;
    }

    /**
     * 解密
     * @param string $str    要解密的数据
     * @return string        解密后的数据
     */
    static public function decrypt($str) {

        $decrypted = openssl_decrypt(base64_decode($str), 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        return $decrypted;
    }
}

2. 非対称暗号化

対称暗号化アルゴリズムは、暗号化と復号化に同じ秘密鍵を使用します。非対称暗号化アルゴリズムでは、暗号化と復号化に 2 つの鍵が必要です。 2 つの秘密キーは、公開キー (略してパブリック キー) と秘密キー (略してプライベート キー) です。

非対称暗号化で使用される主なアルゴリズムは、RSA、Elgamal、バックパック アルゴリズム、Rabin、D-H、ECC (楕円曲線暗号アルゴリズム) などです。

RSA 暗号化アルゴリズム

RSA は現在最も影響力のある公開キー暗号化アルゴリズムであり、このアルゴリズムは非常に単純な数理論の事実に基づいています。 2 つの大きな素数を乗算するのは簡単ですが、その積を因数分解するのは非常に難しいため、その積が暗号化キー、公開キー、および 2 つの大きな素数を組み合わせて秘密キーを形成するものとして公開される可能性があります。公開キーは公開して誰でも使用できるようにし、秘密キーは復号化のために使用します。

復号者は秘密キーを所有し、秘密キーの計算によって生成された公開キーを暗号化者に解放します。暗号化では、公開キーを使用して暗号文を暗号化し、復号者に送信します。復号者は、秘密キーを使用して暗号文を平文に復号します。

たとえば、A が B に情報を送信したいとします。最初に役割を決定します。A は暗号化者、B は復号化者です。まず、B は秘密鍵と呼ばれる KEY をランダムに決定し、この KEY を送信せずにマシン B に保持し、次にこの KEY から公開鍵と呼ばれる別の KEY を計算します。この公開キーの特性は、それを生成した秘密キーを独自に計算することがほとんど不可能であるということです。次に、公開鍵がネットワークを通じて A に送信されます。公開鍵を受け取った A は、公開鍵を使用して情報を暗号化し、暗号文をネットワークを通じて B に送信します。最後に、B は既知の秘密鍵を使用して情報を暗号化します。暗号文が解読されました。以上が RSA アルゴリズムのワークフローです。

#アルゴリズムの実装プロセスは次のとおりです:

  1. # 2 つの大きな素数 p と q (p は q に等しくありません) をランダムに選択し、計算します。 N=pq.

  2. オイラー関数によると、N 以下で N と素な整数の数は (p-1)(q-1) です。

  3. (p-1)(q-1) と互いに素で、e が (p-1)(q-1) より小さい整数 e を選択してください。

  4. 次の式を使用して d を計算します: d× e ≡ 1 (mod (p-1)(q-1))。

  5. p と q のレコードを破棄します。

上記の内容では、(N,e) が公開鍵、(N,d) が秘密鍵です。

秘密キーと公開キーの生成

秘密キー ファイルの生成:

openssl genrsa -out rsa_private_key.pem 1024

秘密キーを使用して公開キーを生成:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

データは、生成された公開キーと秘密キーを使用して暗号化および復号化できます。

PHP RSA 実装 (暗号化、復号化)

PHP 実装コード (公開キー暗号化)秘密鍵の復号化):

class RSA
{
    /**
     * @param string $str 要加密的数据
     * @param string $public_key 公钥
     * @return string
     */
    static public function encrypt($str, $public_key) {

        $encrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_encrypt($str, $encrypted, $pu_key);//公钥加密

        $encrypted = base64_encode($encrypted);

        return $encrypted;
    }

    /**
     * 解密
     * @param string $str 要解密的数据
     * @param string $private_key 私钥
     * @return string
     */
    static public function decrypt($str, $private_key) {

        $decrypted = '';
        $pi_key =  openssl_pkey_get_private($private_key);
        openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私钥解密

        return $decrypted;
    }
}

PHP 実装コード (秘密鍵の暗号化と公開鍵の復号化):

class RSA
{
    //私钥加密 
    static public function encrypt($str, private_key) {

        $encrypted = '';
        $pi_key = openssl_pkey_get_private($private_key);
        openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密
        
        $encrypted = base64_encode($encrypted);
        
        return $encrypted;
    }
    //公钥解密
    static public function decrypt($str, $public_key) {

        $decrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公钥解密
        
        return $decrypted;
    }
}

要約: 上記がこの記事の全内容です。お役に立てば幸いです。みんなの学習の手助けに。

以上がPHPで暗号化および復号化するにはどうすればよいですか? PHP の暗号化および復号化方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。