aes加密 js和php數據傳遞


必須先確定js與php兩邊的加密模式、秘鑰,否則不能相互解開。

php加密:

function encrypt($data='hello,axl'){

$screct_key = '1234567899876543';//必須是16、24、32位

$str = $screct_key;

$iv =mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND);

$encrypt_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC, $screct_key);//這一步確定機密模式為128位cbc模式MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC;

return base64_encode($encrypt_str);//可不用base64_encode,不用$encrypt_str為亂碼,但是解密過后不影響。如果需要查看最好使用base64
}

php解密:

function decrypt($str){
$screct_key = '1234567899876543';
$str = base64_decode($str);
$iv = $screct_key ;
$encrypt_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC, $screct_key);
$encrypt_str = trim($encrypt_str);
return $encrypt_str;

}

 

js加密:

//需要的js文件

<script src="./rollups/aes.js"></script>;
<script src="./components/pad-zeropadding.js"></script>;

加密
function jsencrypt(str){
var key='1234567899876543';
var iv=key;
var mi=CryptoJS.AES.encrypt(str,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
return result;
}

 

解密
function jsdecrypt(str){
var key='1234567899876543';
var iv=key;
var result=CryptoJS.AES.decrypt(str,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding}).toString(CryptoJS.enc.Utf8);//確定解密編碼CryptoJS.enc.Utf8,必須與php編碼一直不然亂碼
return result;
}

 

使用jquery傳值發現不能對數組加密只能單個加密。且連接時需要加引號。

function userLogin(name,pass){

  var name=jsencrypt(name);
  var pass=jsencrypt(pass);
  $.ajax({
    type:"POST",
    url:"./login",
    data: {"name":"'"+name+"'","pass":"'"+pass+"'"},//此處需用引號將加密后的東西括起來,否則會報Uncaught RangeError: Maximum call stack size exceeded,不知道是我js的問題還是我的aes包的問題,推斷應該是jquery文件問題。
    success:function(msg){
      alert(msg);
    },
  error: function() {
    alert('error);
  },
})
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM