如何在php中检索加密数据?

时间:2015-06-10 08:50:17

标签: php

代码如下:

if(isset($_POST['submit'])){
        $name1=$_POST["name1"];
        //echo "$name1";
        $name2=$_POST["name2"];
        $email=$_POST["email"];
        $phone=$_POST["phone"];
        $comment=$_POST["comment"];
        $gender=$_POST["gender"];
        $age=$_POST["age1"];
        $date=$_POST["date"];
        $att_date = date("y-m-d",strtotime($_POST["date"])); 

    if($name1 !='' || $email !=''){
                    $query = mysql_query("INSERT INTO tb_card(fname, lname, email, phone, comment, gender, age, joindate) values(MD5('".$name1."'), MD5('".$name2."'), MD5('".$email."'),    MD5('".$phone."') , '$comment', '$gender','$age', '$att_date')");
                    //echo $query;                                                                                                 encrypt('".$_POST['passwd']."')
                    echo "<br/><br/><span>Data Inserted successfully...!!</span><br>";

               }else 
                {

                }

    }   

3 个答案:

答案 0 :(得分:2)

由于md5是哈希算法,因此无法解码。散列值具有称为一次性属性的属性。在此,它是“单向的”。它们可以进行比较,因此您可以查看用户输入是否与数据库中已经散列的哈希值相同。但是不要使用md5作为密码哈希,因为md5是易受攻击的,并且这个哈希算法存在许多彩虹表。

你需要例如mcrypt mcrypt PHP Manual来做你想做的事。

答案 1 :(得分:0)

遗憾的是,您无法检索md5加密数据。 如果必须,请尝试

function string2secret($str)
{
 $key = "123";
 $td = mcrypt_module_open(MCRYPT_DES,'','ecb','');
 $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
 $ks = mcrypt_enc_get_key_size($td);

 $key = substr(md5($key), 0, $ks);
 mcrypt_generic_init($td, $key, $iv);
 $secret = mcrypt_generic($td, $str);
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 return $secret;
}

function secret2string($sec)
{
 $key = "123";
 $td = mcrypt_module_open(MCRYPT_DES,'','ecb','');
 $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
 $ks = mcrypt_enc_get_key_size($td);

 $key = substr(md5($key), 0, $ks);
 mcrypt_generic_init($td, $key, $iv);
 $string = mdecrypt_generic($td, $sec);
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 return trim($string);
}

echo secret2string(string2secret("11111111111111111"));
echo string2secret("11111111111111111");

mcrypt PHP extension is need

答案 2 :(得分:0)

MD5是一种单向散列机制。它不能通过简单的编程来反转,例如unmd5($string)或类似的。 “解码”数据库中数据的唯一方法是使用所谓的彩虹表。

Rainbow表将散列字符串(您的数据)与预先存在的md5()散列列表进行比较,以确定它匹配的字符串。如果它匹配匹配,它将使用同一行中的纯文本项来显示消息。

对于您想要做的事情,这不是一个可行的解决方案。如果要调用数据,则需要使用自定义编码算法(使用str_replace()等)或以明文形式存储。

您提交的数据不是通常使用散列算法加密的数据类型。我只是建议删除md5以解决您的问题。