Javascript 通过AJAX传递加密值返回不正确的值

Javascript 通过AJAX传递加密值返回不正确的值,javascript,php,jquery,ajax,encryption,Javascript,Php,Jquery,Ajax,Encryption,我正在使用jQueryAjax为PHP文件传递变量。当被封装的值通过PHP时,它看起来与我在HTMLDOM中看到的不同 这就是它在HTML DOM中的外观 <input type="hidden" name="meta" value="�!e�����"> 这就是它在JavaScript警报中的外观(同上) 这就是它在PHP加密版本中的外观 function encrypt($pure_string, $encryption_key){ $iv_size = mcrypt_

我正在使用jQueryAjax为PHP文件传递变量。当被封装的值通过PHP时,它看起来与我在HTMLDOM中看到的不同

这就是它在HTML DOM中的外观

<input type="hidden" name="meta" value="�!e�����">
这就是它在JavaScript警报中的外观(同上)

这就是它在PHP加密版本中的外观

function encrypt($pure_string, $encryption_key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
    return $encrypted_string;
}
�!e�����
这是我解释它时的奇怪部分,它的外观不同

N~\�7V��咮���a�2�YE�
解密后,它应该返回值1

这是PHP的一面

解密值

$to = $_POST["meta"];
$to = decrypt($to, ENCRYPTION_KEY);
这是加密密钥

if(!defined('ENCRYPTION_KEY')){
    define("ENCRYPTION_KEY", "!@#$%^&*");
}
这是用于解除锁定的函数

function decrypt($encrypted_string, $encryption_key){
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
return $decrypted_string;
}
这是jQuery端

�!e�����
$("form#form-update-status").on('submit', function(){
    var form, url, wipit, status;
    if($.trim(wipit) == ""){
        form = $(this).serializeArray();
        url = "ajax/update-status.php";
        $.post(url, form, function(data){
            $(".button-update-status").html(data);
        });
    }
    return false;
});

这可能与表单发布期间的字符编码有关。解决此问题的最简单方法是使用base64编码字符串来防止特殊字符。将加密/解密更改为:

function encrypt($pure_string, $encryption_key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
    return base64_encode($encrypted_string);
}
function decrypt($encrypted_string, $encryption_key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, base64_decode($encrypted_string), MCRYPT_MODE_ECB, $iv);
    return $decrypted_string;
}
此外,请阅读有关在互联网上逃逸的内容()。你真的应该逃避所有的输出。因此,改变这一说法:

<input type="hidden" name="meta" id="meta" value="<?php echo htmlentities(encrypt($profile_id, ENCRYPTION_KEY), ENT_QUOTES, 'UTF-8'); ?>">

你能发布你是如何用加密密钥输出meta的吗?@DaveChen我已经编辑了这个问题。我正在将POST meta转换为局部变量$to
$to=$\u POST[“meta”]
我的意思是,你是如何生成
?@DaveChen请再次检查我在“我正在使用此PHP函数生成上述加密值”下重新编辑的问题
<input type="hidden" name="meta" id="meta" value="<?php echo htmlentities(encrypt($profile_id, ENCRYPTION_KEY), ENT_QUOTES, 'UTF-8'); ?>">