我能夠使用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試圖迴應解密密碼後,我仍然得到加密的一個作爲迴應。
每當我在做這樣的事情,我總是嘗試驗證我的加密部分的輸出實際上是正確的。我嘗試使用像http://aes.online-domain-tools.com/這樣的網站來檢查它是否正確解密。只需將一個字符串傳入您的jquery加密器,並查看它是否從網站解密。應該幫助你找出問題所在。 – Jazzepi
我已編輯帖子。 var密碼主要是有加密部分 –
問題是你想用這個做什麼。如果您想在客戶端上使用加密或散列,那麼您仍然需要使用SSL/TLS,因爲中間人攻擊可能會更改從服務器發送到客戶端的JavaScript並徹底刪除您的加密/散列。另請參閱[Javascript Cryptography Considered Harmful](https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/august/javascript-cryptography-considered-harmful/) –