js 加解密只需直接套改即可function xor_enc(str, key) {
  var crytxt = '';
  var k, keylen = key.length;
  for(var i=0; i<str.length; i++) {
    k = i % keylen;
    crytxt += String.fromCharCode(str.charCodeAt(i) ^ key.charCodeAt(k));
  }
  return crytxt;
}但是由于可能会涉及到中文,问题就复杂多了
任何中文(gbk、utf-8)传递到 js 都统一转换成了 unicode
也就是说 js 只能处理 unicode 编码的串
所以对 php 端的函数做一下改造
测试例<?php
function xor_enc($str,$key) {
  $str = array_values(unpack('n*', iconv('gbk', 'ucs-2', $str)));
  $key = array_values(unpack('n*', iconv('gbk', 'ucs-2', $key)));
  $crytxt = '';
  $keylen = count($key);
  foreach($str as $i=>$v) {   
    $k = $i % $keylen;
    $crytxt .= pack('n', $v ^ $key[$k]);
  }
  return iconv('ucs-2', 'gbk', $crytxt); 
}$str = "北京欢迎您";
//$str = 'abcd';
$key = "Welcome";
$crytxt = xor_enc($str,$key); 
echo "加密后->".$crytxt; 
echo "<br>"; 
echo "解密后->".xor_enc($crytxt,$key);
echo "<p>"; 
?>
<script>
function xor_enc(str, key) {
  var crytxt = '';
  var k, keylen = key.length;
  for(var i=0; i<str.length; i++) {
    k = i % keylen;
    crytxt += String.fromCharCode(str.charCodeAt(i) ^ key.charCodeAt(k));
  }
  return crytxt;
}
str = '<?=$str?>';
key = '<?=$key?>';
var t  = xor_enc(str, key);
document.write('js加密 ' + t +'<br>');
document.write('js解密 ' + xor_enc(t, key)+'<br>');document.write('js解密php加密串 ' + xor_enc('<?=$crytxt?>', key)+'<br>');
</script>加密后->區仉歎辭惇
解密后->北京欢迎您
js加密 區仉歎辭惇
js解密 北京欢迎您
js解密php加密串 北京欢迎您