文字列(jsコード)をphpで「暗号化」してから、javascriptを使用してデコードしようとしています。
これはphp関数です:
function xor_string( $text, $xorKey ) {
$xored = '';
$chars = str_split( $text );
$i = 0;
while ( $i < count( $chars ) ) {
$xored .= chr( ord( $chars[$i] ) ^ $xorKey );
$i++;
}
return $xored;
}
これはjs関数です:
function xor_string( str, key ) {
var xored = "";
for (i=0; i<str.length;i++) {
var a = str.charCodeAt(i);
var b = a ^ key;
xored = xored+String.fromCharCode(b);
}
console.log(xored);
}
これは、特定のキーでは双方向に機能しますが、他のキーでは失敗します。たとえば、次のようになります。
echo urlencode( xor_string( 'document.location.href.search', 67 ) );
戻り値:
%27%2C+6.%26-7m%2F%2C+%227%2A%2C-m%2B1%26%25m0%26%221+%2B
そして、私がjavascriptでそれを「デコード」しようとすると、次のようになります。
var str = decodeURIComponent("%27%2C+6.%26-7m%2F%2C+%227%2A%2C-m%2B1%26%25m0%26%221+%2B");
xor_string( str, 67 );
それは戻ります:
dohument.lohation.href.searhh
なぜこれが起こっているのか誰もが知っていますか?
120などの一部の「キー」では正常に機能しますが、他の多くのキーでは失敗します。