我可以使用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);
}
?>
问题是,即使我试图回复解密的密码,我仍然会将加密的密码作为回复。
答案 0 :(得分:-1)
我知道这不是一个答案,而且我知道我会把它写成答案,但我想尽可能清楚地说明这一点!
请勿加密PASSWORDS .... HASH THEM,然后在需要时比较哈希值!
加密密码意味着数据(或本例中的密码)仍然包含在内,这意味着某人可以在知识,时间和精力的情况下提取密码。
就像亨德里克所说的那样,使用BCrypt而不是MD5的原因......