2013-07-31 25 views
0

我試圖在PHP和Javascript中加密/解密由隨機函數生成的$ session_key字符串。它適用,但不適用於所有字符串。如果使用一些$ session_key,結果就不一樣了。您可以看到打開瀏覽器控制檯的結果。XOR加密Javascript和PHP失敗,並帶有一些密鑰

<?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("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 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> 

回答

0

對於給定的$session_key,結果與PHP和JavaScript相同。

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

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

注意,<將開始一個新的HTML標籤,瀏覽器不會顯示在頁面上輸出的其餘部分。您必須使用「查看源代碼」來查看它,或者在輸出結果之前讓程序調用htmlspecialchars

這不是一個很好的加密方式:長密碼不會給予任何額外的保護,因爲所有的字符總是異或。例如$password=chr(15)會給出與當前密碼相同的結果。

+0

也許我可以用base64編碼解決之前的字符串回聲它 –