我是PHP开发的新手。我试图将密码加密到DB并以相反的方式解密它但由于某种原因我在解密中没有得到正确的值。 例如我插入密码:" mat1234"当我解密时,我得到了: " 6mF34vv0wUBREjdV9S2ZgfCNk + wwMWZkMjFjZTkx" 请帮我解决。
这是我的主要PHP代码:
test.php的:
<?php
/**
* Created by PhpStorm.
* User: matant
* Date: 5/13/2015
* Time: 1:29 PM
*/
error_reporting(0);
//ini_set("error_reporting", E_ALL & ~E_DEPRECATED);
require_once 'index.php';
$tag = $_POST['tag'];
$user = $_POST['paramUsername'];
$password = $_POST['paramPassword'];
$email = $_POST['paramEmail'];
$output = array();
$con = mysql_connect('localhost','root','');
if (!$con)
{
die('could not connect:'.mysql_error());
}
mysql_select_db('api',$con);
$fn = new Functions();
if($tag == "login")
{
$encrypted_password = md5($password);
$output["encrypted_password"] = $encrypted_password;
$result = mysql_query("SELECT * FROM users WHERE users.usern ='$user' and users.password ='$encrypted_password'");
if(!$result){
$output["error_msg"] = "query failed";
print(json_encode($output));
}
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0){
$row = mysql_fetch_assoc($result);
$output["user"] = $row;
$output["msg"]="working";
print(json_encode($output));
}
else{
$output["msg"]="Password or user is incorrect!";
print(json_encode($output));
}
mysql_close($con);
}
elseif($tag == "insert")
{
/* $hash = $fn->hashSSHA($password);
$encrypted_password = $hash["encrypted"];
$salt = $hash["salt"];*/
$encrypted_password = md5($password);
$result = mysql_query("INSERT INTO users (usern , email , password) VALUES ('$user' , '$email' , '$encrypted_password')");
if(!$result)
{
$output["msg"] = "failed";
$output["error_msg"] = "insert failed";
print(json_encode($output));
}else{
$output["msg"] = "insert working";
print(json_encode($output));
}
}
else {
$output["msg"] = "not working";
$output["error_msg"] = "tag param is missing";
print(json_encode($output));
}
?>
答案 0 :(得分:1)
你应该无法反转散列,这是散列的重点;它是单向加密函数。您可以重新制作它并且它完全相同,但如果不先知道原始密码就无法撤消它。
你不应该真正自制你自己的加密(例如你需要考虑盐腌等事情);因此,建议使用预制的哈希算法,如Bcrypt或PBKDF2。
在较新的PHP版本中,有password_hash和password_verify函数可帮助您处理密码。