ゼロと無限の間に

フリーでオープンソースなJavaScriptとかPHPとか。

ユーザ用ツール

サイト用ツール


php-tool-box:code-book

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
最新のリビジョン 両方とも次のリビジョン
php-tool-box:code-book [2011/09/06 22:38]
dgbadmin 0.2.0
php-tool-box:code-book [2011/09/16 03:56]
dgbadmin 0.2.1 暗号鍵長チェックを追加
行 21: 行 21:
 <code php> <code php>
 <?php <?php
-$key = '秘密の鍵';+require('CodeBook.php'); 
 + 
 +$key = '秘密の鍵128b';
 $text = '秘密のメッセージ'; $text = '秘密のメッセージ';
- +  
 + 
 /* AES(RIJNDAEL128)、CBC、PKCS#5でPAD */ /* AES(RIJNDAEL128)、CBC、PKCS#5でPAD */
 $codeBook = new CodeBook(); $codeBook = new CodeBook();
 list($encrypted, $iv) = $codeBook->encrypt($key, $text); //暗号化 list($encrypted, $iv) = $codeBook->encrypt($key, $text); //暗号化
 $decrypted = $codeBook->decrypt($key, $encrypted, $iv); //復号 $decrypted = $codeBook->decrypt($key, $encrypted, $iv); //復号
 + 
 // => "秘密のメッセージ => (略) => 秘密のメッセージ" // => "秘密のメッセージ => (略) => 秘密のメッセージ"
 echo $text . ' => ' . $encrypted . ' => ' . $decrypted; echo $text . ' => ' . $encrypted . ' => ' . $decrypted;
 echo '<br />'; echo '<br />';
 echo var_dump($text === $decrypted); // => bool(true) echo var_dump($text === $decrypted); // => bool(true)
 + 
 echo '<hr />'; echo '<hr />';
- +  
 + 
 /* RIJNDAEL256、ECB、Null文字でPAD */ /* RIJNDAEL256、ECB、Null文字でPAD */
 $codeBook = new CodeBook(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB, CodeBook::PAD_NULL); $codeBook = new CodeBook(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB, CodeBook::PAD_NULL);
 list($encrypted) = $codeBook->encrypt($key, $text); //暗号化(ECBはIV不要) list($encrypted) = $codeBook->encrypt($key, $text); //暗号化(ECBはIV不要)
 $decrypted = $codeBook->decrypt($key, $encrypted); //復号 $decrypted = $codeBook->decrypt($key, $encrypted); //復号
 + 
 // => "秘密のメッセージ => (略) => 秘密のメッセージ" // => "秘密のメッセージ => (略) => 秘密のメッセージ"
 echo $text . ' => ' . $encrypted . ' => ' . $decrypted; echo $text . ' => ' . $encrypted . ' => ' . $decrypted;
 echo '<br />'; echo '<br />';
 echo var_dump($text === $decrypted); // => bool(true) echo var_dump($text === $decrypted); // => bool(true)
 + 
 echo '<hr />'; echo '<hr />';
- +  
 + 
 /* Blowfish、CBC、スペースでPAD */ /* Blowfish、CBC、スペースでPAD */
 $codeBook = new CodeBook(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC, CodeBook::PAD_SPACE); $codeBook = new CodeBook(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC, CodeBook::PAD_SPACE);
 list($encrypted, $iv) = $codeBook->encrypt($key, $text); //暗号化 list($encrypted, $iv) = $codeBook->encrypt($key, $text); //暗号化
 $decrypted = $codeBook->decrypt($key, $encrypted, $iv); //復号 $decrypted = $codeBook->decrypt($key, $encrypted, $iv); //復号
 + 
 // => "秘密のメッセージ => (略) => 秘密のメッセージ" // => "秘密のメッセージ => (略) => 秘密のメッセージ"
 echo $text . ' => ' . $encrypted . ' => ' . $decrypted; echo $text . ' => ' . $encrypted . ' => ' . $decrypted;
行 68: 行 70:
 /** /**
   CodeBook.php   CodeBook.php
-  @version   0.2.0+  @version   0.2.1
   @see       http://0-oo.net/sbox/php-tool-box/code-book   @see       http://0-oo.net/sbox/php-tool-box/code-book
   @copyright 2009-2011 dgbadmin@gmail.com   @copyright 2009-2011 dgbadmin@gmail.com
行 108: 行 110:
  */  */
  public function encrypt($key, $encryptee, $iv = null) {  public function encrypt($key, $encryptee, $iv = null) {
 + $this->_checkKeySize($key);
 +
  if (!$iv) {  if (!$iv) {
  $iv = $this->_getRandIv();  $iv = $this->_getRandIv();
行 129: 行 133:
  */  */
  public function decrypt($key, $encrypted, $iv = null) {  public function decrypt($key, $encrypted, $iv = null) {
 + $this->_checkKeySize($key);
  $bin = $this->hex2bin($encrypted);  $bin = $this->hex2bin($encrypted);
   
行 182: 行 187:
  public function hex2bin($hex) {  public function hex2bin($hex) {
  return pack('H*', $hex);  return pack('H*', $hex);
 + }
 + /**
 + *  暗号鍵の長さをチェックする
 + *  @param  string  $key    暗号鍵
 + *  @throws Exception   長さが不正な場合に例外を投げる
 + */
 + private function _checkKeySize($key) {
 + $sizes = mcrypt_module_get_supported_key_sizes($this->_cipher);
 +
 + //可変の場合は空なのでチェックしない
 + if ($sizes && !in_array(strlen($key), $sizes)) {
 + throw new Exception("Invalid key length ($key)");
 + }
  }  }
  /**  /**
php-tool-box/code-book.txt · 最終更新: 2020/10/25 12:07 by dgbadmin