jQuery ajax + PHP [高级] 中的客户端密码加密

cilent side password encryption in jQuery ajax + PHP [advance]

我得到了答案 here 如何在 javascript 中加密 post 数据并在服务器端解密它。我在使用 ajax 表单提交实现 javascriot 时遇到问题。我尝试使用我的 ajax 来实现它,如下所示,在我的代码片段中它没有按预期工作。

我没有预先使用 jQuery 这个功能,但我可以向某人学习,提供这个线程的正确解决方案。 我在同一平台 Whosebug 上显示了多个线程,但问题有点相似,但我的回答完全不同。请不要将其标记为 spam/duplicate/pending。谢谢 stackover 开发者,

$("#form").unbind("submit").bind("submit", function(e) {
  e.preventDefault();

  function encrypt() {
    var key = CryptoJS.enc.Hex.parse("0123456789abcdef0123456789abcdef");
    var iv = CryptoJS.enc.Hex.parse("abcdef9876543210abcdef9876543210");

    var newpassword = $('input[name="newpassword"]');

    var hash = CryptoJS.AES.encrypt(newpassword, key, {
      iv: iv
    });
    $('input[name="newpassword"]').val() = hash;

    //alert(hash);
    return false;
  }


  grecaptcha.ready(function() {
    grecaptcha.execute("RECAPTCHA_SECRET_CODE", {
      action: "updatepass"
    }).then(function(token) {
      let formData = {
        token: token,
        newpassword: newpassword
      };
      timeExecute = new Date().getTime();
      $.ajax({
        type: "POST",
        data: formData,
        cache: false,
        success: function(response) {
          if (response.status == "success") {
            $(form)[0].reset();
            alert("Password Changed");
          } else {
            alert("ERROR");
          }
        },
        timeout: 10000,
        async: false
      });
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<script src="//crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script>
<script src="https://www.google.com/recaptcha/api.js?render=RECAPTCHA_SECRET_CODE"></script>
<form class="cust-form" id="form" method="POST">
  <div class="password-input">
    <input type="password" id="reg_pass" class="form-control" autofocus="true" name="newpassword" autocomplete="off" />
  </div>
  <button class="btn btn-default" id="passwordBtn">Change Password</button>
</form>

$("#form").unbind("submit").bind("submit", function(e) {
      e.preventDefault();
      encrypt();//call the function you declared
      function encrypt() {
          var key = CryptoJS.enc.Hex.parse("0123456789abcdef0123456789abcdef");
          var iv = CryptoJS.enc.Hex.parse("abcdef9876543210abcdef9876543210");

          var newpassword = $('input[name="newpassword"]').val();//get the value

          var hash = CryptoJS.AES.encrypt(newpassword, key, {
            iv: iv
          });
          $('input[name="newpassword"]').val(hash);//insert the hashed value
          
          //alert(hash);
          return false;
      }
      $('#form').submit();//submit the form manually if you use e.preventDefault()
});

在您的 button 元素中:

<button type="submit" class="btn btn-default" id="passwordBtn">Change password</button>