簡體   English   中英

XOR加密Javascript和PHP因某些密鑰而失敗

[英]XOR encryption Javascript and PHP fails with some keys

我正在嘗試使用PHP和Javascript加密/解密由隨機函數生成的$ session_key字符串。 它有效,但不適用於所有字符串。 對於某些$ session_key,例如,結果是不同的。 您可以打開瀏覽器控制台查看結果。

<?php

function xor_this($str, $key) {
    $result = '';
    for ($i = 0; $i < strlen($str); $i++) {
        $tmp = $str[$i];
        for ($j = 0; $j < strlen($key); $j++) {
            $tmp = chr(ord($tmp) ^ ord($key[$j]));
        }
        $result .= $tmp;
    }
    return $result;
}

#session_key generated by substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 40)
$session_key = 'h9PYAE6KceX5g7081SnjCFBpVfux3bRtmdyDWwHq';
$password = '9b06a9342b5ac4a825088a0f0c2a2e7cc091393f';


echo xor_this($session_key, $password);

?>

<html>
    <script>

        function xor_this(str,key)
        {
            var xor = "";
            for (var i = 0; i < str.length; ++i) {
                tmp = str[i];
                for(var j = 0; j < key.length; ++j) {
                    tmp = String.fromCharCode(tmp.charCodeAt(0) ^ key.charCodeAt(j));
                }
                xor += tmp;
            }
            return xor;
        }

        var session_key = '<?php echo $session_key?>';
        var password = '<?php echo $password?>';
        console.log(xor_this(session_key,password));

    </script>
</html>

使用給定的$session_key ,結果與PHP和JavaScript相同。

PHP產生: g6_VNJ9DljW:h8?7>\\aeLIMYizw<m]{bkvKXxG~

JavaScript產生: g6_VNJ9DljW:h8?7>\\aeLIMYizw<m]{bkvKXxG~

請注意, <將啟動一個新的HTML標記,瀏覽器將不會在頁面上顯示其余的輸出。 您必須使用“查看源代碼”來查看它,或者使程序在輸出結果之前調用htmlspecialchars

順便說一下,這並不是什么加密操作:長密碼並不能提供任何額外的保護,因為所有字符總是被XOR在一起。 例如, $password=chr(15)給出的結果與當前密碼相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM