ホームページ  >  記事  >  バックエンド開発  >  PHP の組み込み関数による DES アルゴリズムによるデータの暗号化と復号化_PHP チュートリアル

PHP の組み込み関数による DES アルゴリズムによるデータの暗号化と復号化_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:18:36846ブラウズ

プロジェクトの都合上、「認可コード」を生成できるクラスを記述する必要があります(認可コードには主にプロジェクトの有効期限が含まれます)。生成された認可コードはファイルに書き込まれます。プロジェクトが実行されると、ファイル内の暗号文が自動的に読み取られ、一意の「キー」を使用して関数が呼び出され、暗号文が復号化され、プロジェクトの有効期限が解釈されます。
以前、主にbase64+md5+reverse stringを自分で書いてみました。このアルゴリズムは単純すぎるため簡単に解読され、暗号化と復号化における「鍵」の重要性を認識できていないため、放棄されました。
その後、関連情報を検索したところ、Mcrypt という強力な関数ライブラリが PHP に組み込まれていることがわかりました。実際、mcrypt 自体は強力な暗号化および復号化メソッドを提供し、DES、TripleDES、Blowfish (デフォルト)、3-WAY、SAFER-SK64、SAFER-SK128、TWOFISH、TEA、RC2、およびCBC、OFB、CFB、ECB の GOST。
以下は、Baidu Encyclopedia の「暗号化アルゴリズム」の説明からの簡単な引用です:
データ暗号化の基本的なプロセスは、元はプレーン テキストだったファイルまたはデータを特定のアルゴリズムに従って処理し、通常「暗号化アルゴリズム」と呼ばれる読み取り不可能なコードにします。 「暗号文」では、対応するキーを入力した場合にのみ元のコンテンツが表示されます。このようにして、不正な人物によるデータの盗難や読み取りを防ぐという目的が達成されます。 このプロセスの逆は復号化であり、エンコードされた情報を元のデータに変換するプロセスです。
暗号化技術は通常、「対称」と「非対称」の2つに分類されます。
対称暗号化は、暗号化と復号化に同じキーを使用します。この暗号化技術は、現在広く使用されています。たとえば、米国政府が採用している DES 暗号化規格は、その代表的な暗号化方式です。セッションキーの長さは56ビットです。
非対称暗号化とは、暗号化と復号化に異なる鍵が使用されることを意味します。通常、「公開鍵」と「秘密鍵」と呼ばれる 2 つの鍵があり、それらをペアにする必要があります。そうしないと、暗号化されたファイルを開くことができません。ここでの「公開鍵」は外部に公開できることを意味しますが、「秘密鍵」は外部に公開できず、所有者のみが知ることができます。ここに対称暗号方式の優位性があり、暗号化されたファイルをネットワーク上に送信する場合、どの方法を使っても相手に鍵を伝えることが難しく、盗聴される可能性がある。非対称暗号化方式は鍵が 2 つあり、「公開鍵」を公開できるため、受信者は復号するときに自分の秘密鍵を使用するだけで済み、鍵の送信を回避できる点が非常に優れています。セキュリティ上の問題。
前述したように、mcrypt はさまざまな国際的に公開されているアルゴリズムをサポートしています。このプロジェクトでは、対称アルゴリズムであり、高速で大量のデータの暗号化に適した DES (Data Encryption Standard) アルゴリズムを使用しました。
次に、暗号化クラスで使用されるいくつかの関数について簡単に説明します。

------------------------------------------------ --------------------------------
resource mcrypt_module_open ( string $algorithm , string $algorithm_directory , string $mode , string $ mode_directory )
パラメータ $algorithm: 使用するアルゴリズム。関数 mcrypt_list_algorithms() を使用して、サポートされているすべてのアルゴリズム名を表示できます。
パラメータ $mode: 使用するモード。同様に、組み込み関数 mcrypt_list_algorithms() を使用して、サポートされているすべてのモードを表示

------------------------------------------ ---- --------------------------------
int mcrypt_enc_get_iv_size ( resource $td )
この関数は、使用されるアルゴリズムの初期化 ベクトル (IV) のサイズ (少し抽象的ですが)、IV がアルゴリズムで無視される場合は 0 を返します。
パラメータ$tdはmcrypt_module_open関数の戻り値です。

------------------------------------------------ --------------------------------
string mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_RANDOM ] )
これこの関数は初期化ベクトル (IV) を作成します
パラメータ:
$source は MCRYPT_RAND、MCRYPT_DEV_RANDOM、
MCRYPT_DEV_URANDOM です
注: PHP5.3.0 以降は MCRYPT_RAND のみをサポートします
戻り値:
成功した場合、文字列が返されます 初期ベクトル、失敗した場合は False を返します

----------------------------------------------------- -- --------------------------------------
int mcrypt_enc_get_key_size ( resource $td )
This 関数現在のアルゴリズムでサポートされている最大キー長 (バイト単位) を取得できます
int mcrypt_generic_init ( resource $td , string $key , string $iv )
mcrypt_generic() または mdecrypt_generic() を呼び出す前に、この最初の関数を呼び出す必要があります。この関数は、暗号化されたデータを保存するためのバッファを初期化するのに役立ちます。
パラメータ $key: キーの長さ。$key の現在の値は関数 mcrypt_enc_get_key_size() によって返される値より小さいことに注意してください。
質問: $key の値は大きいほど良いですか?同級生会があれば、この質問に答えるのを手伝ってください。

------------------------------------------------ --------------------------------
string mcrypt_generic ( resource $td , string $data )
前の作業を完了しましたつまり、この関数を呼び出してデータを暗号化できます。
パラメータ $data: 暗号化するデータの内容
戻り値: 暗号化された暗号文を返す

---------------------------- -------------------------------------------------- -- --
bool mcrypt_generic_deinit ( resource $td )
この関数は、現在使用されている暗号化モジュールをアンインストールするのに役立ちます。
戻り値
成功した場合は TRUE を返し、失敗した場合は FALSE を返します

-------------------------------- -- -------------------------------------------
string mdecrypt_generic (リソース $td , string $data)
この関数はデータを復号化するために使用できます。
注: 復号化されたデータは実際のデータよりも長くなる可能性があり、フォローアップが行われる可能性があります


class authCode {
public $ttl;//有効期限の時刻形式: 20120101 (年、月、日)
public $key_1;//キー 1
public $key_2;//キー 2
public $td;
public $ks;//鍵の長さ
public $iv;//初期ベクトル
public $salt;//ソルト値(特定の文字列)
public $encode;//暗号化後の情報
public $return_array = array(); // MAC アドレスを含む文字列配列を返します
public $mac_addr; // 暗号文を保存するファイル パス
public function __construct() {
//Get物理アドレス
$this->mac_addr=$this->getmac(PHP_OS);
$this->ttl=" 20120619";/ /有効期限
$this->salt="~!@#$";//暗号文のセキュリティを向上させるためのソルト値
// echo "
".print_r( mcrypt_list_algorithms ())."< /pre>"; <BR>// echo "<pre class="brush:php;toolbar:false">".print_r(mcrypt_list_modes())."
";
}
/**
* 平文情報を暗号化します
* @param $key key
*/
public function encode($key) {
$this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //MCRYPT_DES アルゴリズム、ecb モードを使用します
$size=mcrypt_enc_get_iv_size($this-> ;td);//初期ベクトルのサイズ
$this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//初期ベクトルを作成する
$this->ks = mcrypt_enc_get_key_size($this->td); //最大値を返すサポートされているキーの長さ (バイト単位)
$this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks);
mcrypt_generic_init($this-> ;td, $this->key_1, $this->iv); //初期処理
//プレーンテキストに保存するには
$con=$this->mac_addr. /Encryption
$this->encode = mcrypt_generic($this->td, $con);
//処理を終了
mcrypt_generic_deinit($this->td)
/ /暗号文をファイルに保存します
$ this->savetofile();
}
/**
* 暗号文を復号化します
* @param $key key
*/
public function decode($key) {
try {
if (!file_exists($this- >filepath)){
新しい例外をスローする("認証ファイルが存在しません");
}else{//認証ファイルが存在する場合は、認証ファイル内の暗号文を読み取ります
$fp=fopen($this-> ;filepath,'r'); =fread($fp,filesize($this->ファイルパス));
$this->key_2 = substr(md5(md5($key).$this->salt),0,$this-> ks);
//初期復号化処理
mcrypt_generic_init($this->td, $this->key_2, $this->iv);
//復号化
$decrypted = mdecrypt_generic($this->td); , $secret);
//復号化後、後続の可能性があります。
元記事:WEB開発_Xiao Fei

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325532.html技術記事プロジェクトのニーズにより、「認可コード」を生成できるクラスを記述する必要があります (認可コードには主にプロジェクトの有効期限が含まれます)。生成された認可コードはファイルに書き込まれます。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。