1

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>
4

1 に答える 1

1

与えられ$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)、現在のパスワードと同じ結果が得られます。

于 2013-07-31T14:20:38.327 に答える