我正在使用jQuery AJAX来传递PHP文件的变量。当加密值通过PHP时,它看起来与我在HTML DOM中的内容不同
这就是它在HTML DOM中的外观
<input type="hidden" name="meta" value="�!e�����">
源代码
$profile_id = 1;
<input type="hidden" name="meta" id="meta" value="<?php echo encrypt($profile_id, ENCRYPTION_KEY); ?>">
我正在使用此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;
}
这是它在JavaScript Alert中的外观(与上面相同)
�!e�����
这是它在PHP加密版本中的外观
�!e�����
这是我解读时的奇怪部分,它的外观不同
N~\�7V��咮���a�2�YE�
解密后它应该具有 1 的值,
这是它的PHP方面
解密值
$to = $_POST["meta"];
$to = decrypt($to, ENCRYPTION_KEY);
这是ENCRYPTION_KEY
if(!defined('ENCRYPTION_KEY')){
define("ENCRYPTION_KEY", "!@#$%^&*");
}
这是decrption的功能
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方面
$("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;
});
答案 0 :(得分:1)
这可能与表单发布期间的字符编码有关。解决此问题的最简单方法是使用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;
}
此外,请阅读有关在互联网上转义一下的内容(official documentation)。你应该真的逃脱你的所有输出。所以改变这个陈述:
<input type="hidden" name="meta" id="meta" value="<?php echo htmlentities(encrypt($profile_id, ENCRYPTION_KEY), ENT_QUOTES, 'UTF-8'); ?>">