2015-10-26 85 views
0

我能夠使用jquery cryptojs庫成功加密我的表單字段中的密碼字段。我爲該庫使用AES算法。但是,我無法在php中解密它。我正在嘗試使用mcrypt_decrypt。我在各種論壇上在線尋找解決方案,但一直未能弄清楚發生了什麼問題。無法使用AES在客戶端使用jquery cryptojs成功加密後使用AES對密碼字段進行decypt密碼字段

這裏是我的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); 
     } 
    ?> 

的問題是即使im試圖迴應解密密碼後,我仍然得到加密的一個作爲迴應。

+0

每當我在做這樣的事情,我總是嘗試驗證我的加密部分的輸出實際上是正確的。我嘗試使用像http://aes.online-domain-tools.com/這樣的網站來檢查它是否正確解密。只需將一個字符串傳入您的jquery加密器,並查看它是否從網站解密。應該幫助你找出問題所在。 – Jazzepi

+0

我已編輯帖子。 var密碼主要是有加密部分 –

+0

問題是你想用這個做什麼。如果您想在客戶端上使用加密或散列,那麼您仍然需要使用SSL/TLS,因爲中間人攻擊可能會更改從服務器發送到客戶端的JavaScript並徹底刪除您的加密/散列。另請參閱[Javascript Cryptography Considered Harmful](https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/august/javascript-cryptography-considered-harmful/) –

回答

-1

我知道這不是一個答案,我知道我正在寫它作爲一個答案,但我想盡可能使這個清楚!

不要加密密碼....哈哈他們,然後在需要時比較哈希值!

加密密碼意味着數據(或在這種情況下的密碼)仍然包含在內,這意味着某人可以提取它,給定的知識,時間和精力。

而像亨德里克說,使用BCrypt不是MD5的陳述的理由...

+0

所以你的意思是說,如果我使用像MD5這樣的算法並將其存儲在服務器端作爲散列?然後,如果該用戶輸入密碼,我只是從客戶端再次散列它並將其與已經存儲的散列進行比較? –

+0

客戶端散列不會添加任何安全性,因爲散列成爲新密碼。 –

+0

Correctomondo :-) – AdamJeffers

相關問題