###前提・実現したいこと
PHPのCryPt関数でハッシュ化した値を、復号したい
###発生している問題・エラーメッセージ
PHPのCryPt関数でハッシュ化した値を復号したいです。
crypt($str, SALT);を使ってハッシュ値を生成しています。
SALTはdefineで定義した固定文字列です。
結果、13桁のハッシュ値が生成されています。このハッシュ値とSALTを元に
元の$strを復号したいのですがうまくできません。
###該当のソースコード
PHP
1//SALT 2define(SALT , "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 3//ハッシュ化処理 4$str_hash = crypt($str, SALT);
PHP
1//復号化用のプログラム 2 3<?php 4//ハッシュ化された値(例) 5$str_hash = "ABCDEFGHIJKLM";(サンプル、実際には英数字の混ざった13桁のハッシュ値) 6 7//SALT 8$salt = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 9 10$str_encrypt = new StringEncrypt(); 11 12//暗号化 13$decrypted = $str_encrypt->decrypt($encrypted, $pass); 14echo $decrypted ."\n"; 15 16?> 17 18 19<?php 20class StringEncrypt 21{ 22 private $td; 23 private $iv_size; 24 private $algorithm; 25 private $mode; 26 private $init = false; 27 28 function __construct($algorithm="blowfish", $mode="ecb"){ 29 $this->algorithm = $algorithm; 30 $this->mode = $mode; 31 $this->td = mcrypt_module_open($this->algorithm, '', $this->mode, ''); 32 $this->iv_size = mcrypt_enc_get_iv_size($this->td); 33 } 34 35 function __destruct(){ 36 if($this->init) mcrypt_generic_deinit($this->td); 37 mcrypt_module_close($this->td); 38 } 39 40 private function init($pass, $iv=null){ 41 if(is_null($iv)){ 42 $iv = mcrypt_create_iv($this->iv_size, MCRYPT_DEV_RANDOM); 43 } else { 44 $iv = base64_decode($iv); 45 } 46 47 if($this->iv_size !== strlen($iv)){ 48 throw new Exception("Incorrect IV size."); 49 }; 50 51 $key = substr( md5($pass), 0, mcrypt_enc_get_key_size($this->td)); 52 mcrypt_generic_init($this->td, $key, $iv); 53 $this->init = true; 54 } 55 56 public function encrypt($str, $pass, $iv=null){ 57 $iv = $this->init($pass, $iv); 58 $encrypted = mcrypt_generic($this->td, $str); 59 return base64_encode($encrypted); 60 } 61 62 public function decrypt($str, $pass, $iv=null){ 63 echo $str; 64 $iv = $this->init($pass, $iv); 65 //$str = base64_decode($str); 66 $decrypted = mdecrypt_generic($this->td, $str); 67 echo $decrypted; 68 return rtrim($decrypted); 69 } 70 71 public function create_iv(){ 72 $iv = mcrypt_create_iv($this->iv_size, MCRYPT_DEV_RANDOM); 73 return base64_encode($iv); 74 } 75}
###試したこと
コマンドプロンプトで上記のプログラムで復号化しようと思いましたが、
出力値が文字化けしてしまい想定した値を得ることができなかった。
###補足情報(言語/FW/ツール等のバージョンなど)
PHP 5.2.0(誤)
PHP 5.4.28(正)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/24 00:30