在客户端使用jquery cryptojs成功加密后,无法使用AES解密php中的密码字段

时间:2015-10-26 21:01:42

标签: php jquery ajax aes

我可以使用jquery cryptojs库成功加密表单字段中的密码字段。我正在为该库使用AES算法。但是,我无法在php中解密它。我正在尝试使用mcrypt_decrypt。我已经在各种论坛上在线寻找解决方案,但却无法确定哪些是错误的。

这是我的html表单: -

  <form id="userDetailsForm" action="/scripts/usernameTest.php" method="post">
<div class="clear"></div> <div class="clear"></div>
<p>Add User</p>
<div class="clear"></div>
<label for="usr">Username</label>
<input type="text" name="usr" id="usr">
<label for="pwd">Password</label>
<input type="password" name="pwd" id="pwd">
<button id="create" class="create" type="submit">Create</button>
</form>

这是我的jquery部分: -

$("#create").click(function(){

    var passwordForNewUser=CryptoJS.AES.encrypt($("#pwd").val(),key).toString();
   // var decryptedPassword=CryptoJS.AES.decrypt(passwordForNewUser,key).toString(CryptoJS.enc.Utf8);
   // console.log("decrypted password: "+decryptedPassword);
    console.log("create clicked");
    formdata = {
        usr: $("#usr").val(),
        pwd: passwordForNewUser,
    };

    var userNamePresentInTable=$("#usr").val();
    var password=CryptoJS.AES.encrypt($("#pwd").val(),key).toString();
    if($("td:contains('" + formdata.usr + "')").text() === formdata.usr){
        $("#userErrorDiv").html("User already exists. Please enter another one").css("color","red");
        duplicateUser=true;
    }else{
        duplicateUser=false;

        /*before adding to table save it in localStorage*/
       /* myLocalStorage.setItem(formdata.usr,formdata.pwd);*/

        $("#userErrorDiv").html("");
        var tr=$('<tr></tr>');
        var enteredVal=$("#usr").val();

        var td_username=$('<td></td>',{
            text:  $("#usr").val()
        }).addClass("editableFields").appendTo(tr);

        var td_level=$('<td></td>', {
            text: "User"
        }).appendTo(tr);

        var td_buttons=$('<td></td>',{
            html: '<button class="edit">Edit</button> <button class="del">Delete</button> <button class="apply">Apply</button>'
        }).appendTo(tr);

        $(tr).find("button").button();
        $(".userTable").append(tr);

        //$("#userDetailsForm").submit();
    }
});

$('#userDetailsForm').on("submit",function(){

    var currentObj=$(this), url=currentObj.attr('action'),type=currentObj.attr('method');
    var data={};

    currentObj.find('[name]').each(function(index,value){
       var currentObj=$(this), name=currentObj.attr('name'), value=currentObj.val();
        data[name]=value;
        console.log(index+" "+data[name]);
    });

    $.ajax({
        url:url,
        type:type,
        data:data,
        success: function(response){
            console.log(response);
        }
    });
    return false;
});

这就是php方面: -

<?php
if(isset($_POST['usr'],$_POST['pwd'] )) {
    $username=$_POST['usr'];
    $password=$_POST['pwd'];
    $key="encyrptedPasswor";
    $decrypted_password=mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$password,MCRYPT_MODE_ECB,'');
     echo nl2br("Username recieved:".$_POST["usr"]."<br/>"."Encrypted password recieved: ".$password."<br/>"."Decypted password recieved: ".$decrypted_password);
      }
    ?>

问题是,即使我试图回复解密的密码,我仍然会将加密的密码作为回复。

1 个答案:

答案 0 :(得分:-1)

我知道这不是一个答案,而且我知道我会把它写成答案,但我想尽可能清楚地说明这一点!

请勿加密PASSWORDS .... HASH THEM,然后在需要时比较哈希值!

加密密码意味着数据(或本例中的密码)仍然包含在内,这意味着某人可以在知识,时间和精力的情况下提取密码。

就像亨德里克所说的那样,使用BCrypt而不是MD5的原因......