ホームページ バックエンド開発 PHPチュートリアル PHP が mcrypt を使用して暗号化と復号化を実装する方法の詳細な説明サンプル コード

PHP が mcrypt を使用して暗号化と復号化を実装する方法の詳細な説明サンプル コード

Jul 08, 2017 am 10:39 AM
mcrypt php 暗号化とデコード

PHP には多数の暗号化メソッドが付属しています。ここでは、mcrypt 拡張機能の使用方法を見ていきます。また、職場でユーザーの Cookie の値を暗号化するためにこれを使用する必要があり、この点について真剣に研究しました。

1. はじめに

Mcrypt は、一般的に使用される暗号化アルゴリズムのカプセル化を完了する PHP の拡張機能です。実際、この拡張機能は mcrypt 標準クラス ライブラリのカプセル化であり、DES、TripleDES、Blowfish (デフォルト)、3-WAY、SAFER-SK64、SAFER-SK128、TWOFISH など、一般的に使用されるかなりの数の暗号化アルゴリズムが完成しています。 、TEA、RC2、および GOST 暗号化アルゴリズムに対応し、CBC、OFB、CFB、ECB の 4 つのブロック暗号化モデルを提供します。

2. インストールと使用

この拡張機能を使用するには、まず mcrypt 標準クラス ライブラリをインストールする必要があります。この拡張機能のコンパイルとインストール方法は通常の PHP 拡張機能と同じであるため、詳細な説明は省略します。

3. 4 つのブロック暗号化モデル

Mcrypt は 4 つのブロック暗号化モデルをサポートしています。簡単に説明すると、次のとおりです:

① MCRYPT_MODE_ECB (電子コードブック) は、ユーザー ログインの暗号化など、少量のランダム データの暗号化に適しています。パスワード。

②. MCRYPT_MODE_CBC (暗号ブロックチェーン) は、暗号化セキュリティレベルが高い重要なファイルタイプに適しています。

③. MCRYPT_MODE_CFB (暗号フィードバック) は、データ ストリームのすべてのバイトを暗号化する必要がある状況に適しています。

④. MCRYPT_MODE_OFB (出力フィードバック、8 ビット) は CFB モードと互換性がありますが、CFB モードよりも安全です。 CFB モードでは、暗号化エラーが拡大します。1 バイトが間違っていると、後続のすべてのバイトが間違ってしまいます。 OFB モードではこの問題は発生しません。ただし、このモードはあまり安全ではないため、お勧めできません。

⑤. MCRYPT_MODE_NOFB (出力フィードバック、nbit) は OFB と互換性があり、ブロック演算アルゴリズムの使用により高いセキュリティを備えています。

⑥. MCRYPT_MODE_STREAM は、WAKE や RC4 などのストリーム暗号化アルゴリズム用に提供される追加モデルです。

NOFB と STREAM は、mycrypt のバージョン番号が libmcrypt-2.4.x 以上の場合にのみ有効です。 (現在は基本的にこのバージョンよりも大きくなり、libmcrypt の最新のメインバージョンは 4 になりました)

4. サポートされているアルゴリズムとモデルを確認します

① mcrypt_list_modes() は現在の環境でサポートされているモデルをリストします

。 ② . mcrypt_list_algorithms() は現在の環境でサポートされているアルゴリズムをリストします

コマンドラインから実行した場合:

コードは次のとおりです:

php -r "var_dump(mcrypt_list_modes()); var_dump(mcrypt_list_algorithms());"
ログイン後にコピー

はすべての結果をリストします。

5.

の使用方法 例 1:

コードは次のとおりです:

<?php
$key = "this is a secret key";
$input = "Let us meet at 9 o&#39;clock at the secret place.";
$encrypted_data = mcrypt_ecb (MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT);
?>
ログイン後にコピー

最も簡単な方法は例 1 に示すとおりで、$input が 3DES アルゴリズムを使用して暗号化されることを示しています。 key は $ key ですが、このメソッドは開発中には使用できなくなる可能性があるため、現在は公式には推奨されていません。 php5 でこのメソッドを呼び出すと、「PHP 警告: 空の IV を使用しようとしていますが、推奨されません」という警告メッセージが表示されます。

公式に推奨されている使用法を例 2 に示します

例 2:

コードは次のとおりです:

<?php
    $key = "this is a secret key";
    $input = "Let us meet at 9 o&#39;clock at the secret place.";
    // 打开mcrypt,或者mcrypt类型的资源对象,该对象使用ecb模式,使用3des作为加密算法。
    $td = mcrypt_module_open(&#39;tripledes&#39;, &#39;&#39;, &#39;ecb&#39;, &#39;&#39;);
    // 创建iv(初始化向量)
    $iv = mcrypt_create_iv (
mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    // 根据密钥和iv初始化$td,完成内存分配等初始化工作
    
mcrypt_generic_init($td, $key, $iv);
    // 进行加密
    $encrypted_data = mcrypt_generic($td, $input);
    // 反初始化$td,释放资源
    
mcrypt_generic_deinit($td);
    // 关闭资源对象,退出
     mcrypt_module_close($td);
?>
ログイン後にコピー


上記のプロセスでデータ暗号化プロセスが完了します。まず、暗号化アルゴリズムと暗号化モードを選択して、mcrypt のリソース オブジェクトと IV を作成します。次に、暗号化に必要なバッファ (メモリ) を初期化し、暗号化後にバッファを解放し、最後にリソース オブジェクトを閉じます。

復号化プロセスは基本的に暗号化と同じです。mcrypt_generic($td, $input) を mdecrypt_generic($td, $input) に置き換えるだけです。他の部分はまったく同じです。もちろん、3des のような対称暗号化アルゴリズムの場合、暗号化と復号化に使用されるキーはまったく同じである必要があります。

6. IV について

すべてのモデルに IV が必要なわけではありませんが、CBC と EBC はオプションです。必要な IV モードでは、暗号化された IV と復号化された IV の値がまったく同じである必要はありません。同じでも異なっていても問題ありません。

7. 単純な暗号化と復号化のクラス

コードは次のとおりです:

class AMPCrypt {
    private static function getKey(){
        return md5(&#39;exampleKey&#39;);
     }
    public static function encrypt($value){
         $td = mcrypt_module_open(&#39;tripledes&#39;, &#39;&#39;, &#39;ecb&#39;, &#39;&#39;);
         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
         $key = substr(self::getKey(), 0, 
mcrypt_enc_get_key_size($td));
         mcrypt_generic_init($td, $key, $iv);
         $ret = base64_encode(mcrypt_generic($td, $value));
         mcrypt_generic_deinit($td);
         mcrypt_module_close($td);
        return $ret;
     }
    public static function dencrypt($value){
         $td = mcrypt_module_open(&#39;tripledes&#39;, &#39;&#39;, &#39;ecb&#39;, &#39;&#39;);
         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
         $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
         $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
         mcrypt_generic_init($td, $key, $iv);
         $ret = trim(mdecrypt_generic($td, base64_decode($value))) ;
         mcrypt_generic_deinit($td);
         mcrypt_module_close($td);
        return $ret;
     }
}
ログイン後にコピー

以上がPHP が mcrypt を使用して暗号化と復号化を実装する方法の詳細な説明サンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles