2010-07-07 9 views
0

en raison de GFW (grand pare-feu) dans notre pays, je dois encoder le contenu dans le transfert de http (https est préférable, mais son second choix).encode par php et par decode js

ma méthode consiste à utiliser encode base64 par php et par decode js, puis montrer dans une iframe. mais il y a un problème dans FF.

est-il une meilleure façon de montrer chaîne encodée base64 dans le navigateur, ou d'une autre façon d'encoder/décoder?

+0

Pouvez-vous montrer le code que vous utilisez? –

+0

Aussi, je ne suis pas tout à fait sûr de la prémisse de base ici: Si le grand pare-feu n'étaient pas en mesure de détecter et base64 décoder le contenu codé, il serait tout à fait un morceau de merde - et que, malheureusement, ce n'est pas, de ce J'entends :) Où exactement transférez-vous où? À quel moment les choses sont-elles filtrées? –

+0

gfw est l'homme au milieu, il va chercher le contenu que vous transférez utiliser http. donc je veux encoder dans le serveur, et décoder dans le navigateur. pour gagner du temps, je enfin utiliser https résoudre ce problème, merci pour votre commentaire – limboy

Répondre

0
Try Something this: 

    function get_rnd_iv($iv_len) 
    { 
     $iv = ''; 
     while ($iv_len-- > 0) { 
      $iv .= chr(mt_rand() & 0xff); 
     } 
     return $iv; 
    } 

    function md5_encrypt($string_value, $salt_key, $iv_len = 16) 
    { 
     $string_value .= "\x13"; 
     $n = strlen($string_value); 
     if ($n % 16) $string_value .= str_repeat("\0", 16 - ($n % 16)); 
     $i = 0; 
     $enc_text = get_rnd_iv($iv_len); 
     $iv = substr($salt_key^$enc_text, 0, 512); 
     while ($i < $n) { 
      $block = substr($string_value, $i, 8)^pack('H*', md5($iv)); 
      $enc_text .= $block; 
      $iv = substr($block . $iv, 0, 512)^$salt_key; 
      $i += 16; 
     } 
     return urlencode(base64_encode($enc_text)); 
    } 

    function md5_decrypt($enc_text, $salt_key, $iv_len = 16) 
    { 
     $enc_text = urldecode(base64_decode($enc_text)); 
     $n = strlen($enc_text); 
     $i = $iv_len; 
     $string_value = ''; 
     $iv = substr($salt_key^substr($enc_text, 0, $iv_len), 0, 512); 
     while ($i < $n) { 
      $block = substr($enc_text, $i, 8); 
      $string_value .= $block^pack('H*', md5($iv)); 
      $iv = substr($block . $iv, 0, 512)^$salt_key; 
      $i += 16; 
     } 
     return preg_replace('/\\x13\\x00*$/', '', $string_value); 
    } 
+0

J'espère vraiment que ces fonctions sont sauvagement mislabeled, comme MD5 ne chiffre pas, et est irréversible, car il est une fonction de hachage. – You

+0

vrai qu'ils sont une fonction de hachage ... Je les utilise pour encoder mes valeurs qui sont passées bien sûr ... et ensuite faire un encodage base64. Bien sûr, aussi l'inverse pour les décrypter. Dans le but d'obscurcir les données. –

0

Vous pouvez simplement définir la propriété innerHTML du corps de la page ...

Tant que la chaîne encodée que la JS est produit est valide HTML pour tout le corps, il devrait fonctionner correctement , et alors vous n'avez rien à faire avec les iframes ou quoi que ce soit.

+0

ouais, c'est un moyen, je pense que ça va marcher – limboy