我想用php「加密」一個字符串(js代碼),然後使用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和其他人可以正常工作,但與許多其他人失敗。
你確定數據之前和之後的URL編碼/解碼是一樣的嗎? – Joe
它看起來像js urldecode留空格爲「+」,而php urldecode只在加號「+」和空格爲空格的地方留下「+」號。例如,php'urldecode('1 +%2B + 2');'返回'1 + 2',但js'decodeURIComponent('1 +%2B + 2');'返回'1 +++ 2'。任何方式來解決這個問題? –
這樣加密Javascript代碼有什麼意義?這不會讓它更難複製。 –