ゼロと無限の間に

フリーでオープンソースな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 [2020/10/25 12:07]
dgbadmin
行 1: 行 1:
 ====== PHPでお手軽に暗号化、復号する - CodeBook.php ====== ====== PHPでお手軽に暗号化、復号する - CodeBook.php ======
 +
 +===== 注意 =====
 +
 +**CodeBook.phpが内部的に使用しているphp-mcryptは、[[http://0-oo.net/php-manual/intro.mcrypt.html|PHP 7.1.0 で 非推奨 となり、 PHP 7.2.0 で削除]]されました。**
 +
 +----
  
 コメントと更新履歴は[[http://0-oo.net/log/category/php-tool-box/code-book/|Code Book Archive - ゼロと無限の間のログ]]へどうぞ。 コメントと更新履歴は[[http://0-oo.net/log/category/php-tool-box/code-book/|Code Book Archive - ゼロと無限の間のログ]]へどうぞ。
行 21: 行 27:
 <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: 行 76:
 /** /**
   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: 行 116:
  */  */
  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: 行 139:
  */  */
  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: 行 193:
  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