ホームページ >php教程 >php手册 >PHP の組み込み関数を使用した DES アルゴリズムによるデータの暗号化と復号化

PHP の組み込み関数を使用した DES アルゴリズムによるデータの暗号化と復号化

WBOY
WBOYオリジナル
2016-06-13 12:00:18853ブラウズ

プロジェクトの都合上、「認可コード」を生成できるクラスを記述する必要があります(認可コードには主にプロジェクトの有効期限が含まれます)。生成された認可コードはファイルに書き込まれます。プロジェクトが実行されると、ファイル内の暗号文が自動的に読み取られ、一意の「キー」を使用して関数が呼び出され、暗号文が復号化され、プロジェクトの有効期限が解釈されます。
以前、base64 md5 逆文字列を中心に自分で書いてみました。このアルゴリズムは単純すぎるため簡単に解読され、暗号化と復号化における「鍵」の重要性を認識できていないため、放棄されました。
その後、関連情報を検索したところ、Mcrypt という強力な関数ライブラリが PHP に組み込まれていることがわかりました。
実際、mcrypt 自体は強力な暗号化および復号化メソッドを提供し、DES、TripleDES、Blowfish (デフォルト)、3-WAY、SAFER-SK64、SAFER-SK128、TWOFISH、TEA、 CBC、OFB、CFB、ECB の RC2 と 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 )
この関数は、でサポートされている最大キー長 (バイト単位) を取得できます。現在のアルゴリズム
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 ( resource $td , string $data )
この関数はデータを復号化するために使用できます。
注: 復号化されたデータは実際のデータよりも長くなる可能性があり、後続のデータが存在する可能性があります。


class authCode {
public $ttl;//有効期限の時刻形式: 20120101 (年、月、日)
public $key_1;//Key 1
public $key_2;//キー 2
public $td;
public $ks;//キーの長さ
public $iv;//初期ベクトル
public $salt;/ /ソルト値 (特定の文字列)
public $encode;//暗号化された情報
public $return_array = array() // MAC アドレスを含む文字列配列を返します
public $mac_addr;//MAC アドレス
public $filepath;//暗号文を保存するファイルパス
public function __construct(){
//物理アドレスを取得
$this->gt;mac_addr=$ this->getmac(PHP_OS) ;
$this->filepath="./licence.txt";
$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.$this->ttl;
//暗号化
$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)){
throw new Exception ("認証ファイルが存在しません"); >}else{// 認証ファイルが存在する場合は、認証ファイル内の暗号文を読み取ります
$fp=fopen($this->filepath,'r' );
$secret=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);
//復号化後、後続の可能性があります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。