2012年1月26日木曜日

[PHP]AESで暗号化・復号化

暗号化と復号化する処理です。
基本的にはmanualに書いてある通りです。

受け取った文字をbase64でエンコードして、暗号化して、暗号化した文字もbase64でエンコードしています。
復号化の際も同じ感じです。

暗号・復号処理に関していつものことなのが、これがAESでうまく暗号化されているかはよく分からず、復号化がうまくいっているので良しとしています。


  1. static public function Encrypt($value){  
  2.   
  3.  //Base64でエンコードする  
  4.  $encodedValue = base64_encode($value);  
  5.   
  6.  /* 暗号モジュールをオープンします */  
  7.  $td = self::getCryptModule();  
  8.   
  9.  /* データを暗号化します */  
  10.  $encrypted = mcrypt_generic($td$encodedValue);  
  11.   
  12.  //暗号化された文字をBase64でエンコードする  
  13.  $encodedEncryptValue = base64_encode($encrypted);  
  14.   
  15.  /* 暗号化ハンドラを終了します */  
  16.  mcrypt_generic_deinit($td);  
  17.   
  18.  /* モジュールを閉じます */  
  19.  mcrypt_module_close($td);  
  20.   
  21.  return $encodedEncryptValue;  
  22. }  
  23.   
  24.   
  25. static public function Decrypt($value){  
  26.   
  27.  //Base64デコードする  
  28.  $decodedValue = base64_decode($value);  
  29.   
  30.  /* 暗号モジュールをオープンします */  
  31.  $td = self::getCryptModule();  
  32.   
  33.  /* 暗号化された文字列を復号します */  
  34.  $decrypted = mdecrypt_generic($td$decodedValue);  
  35.   
  36.  /* 復号ハンドルを終了し、モジュールを閉じます */  
  37.  mcrypt_generic_deinit($td);  
  38.  mcrypt_module_close($td);  
  39.   
  40.  //Base64デコードする  
  41.  $decodedDecryptValue = base64_decode($decrypted);  
  42.   
  43.  return $decodedDecryptValue;  
  44.   
  45. }  
  46.   
  47. static private function getCryptModule()  
  48. {  
  49.   
  50.  /* 暗号モジュールをオープンします */  
  51.  //$td = mcrypt_module_open('tripledes', '', MCRYPT_MODE_ECB, '');  
  52.  $td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');  
  53.   
  54.  /* IV を作成し、キー長を定義します。Windows では、かわりに 
  55.   * MCRYPT_RAND を使用します */  
  56.  $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);  
  57.  $ks = mcrypt_enc_get_key_size($td);  
  58.   
  59.  /* キーを作成します */  
  60.  $key = substr(md5('very secret key'), 0, $ks);  
  61.   
  62.  /* 復号用の暗号モジュールを初期化します */  
  63.  mcrypt_generic_init($td$key$iv);  
  64.   
  65.  return $td;  
  66. }  

0 件のコメント: