2010-06-02 3 views
1

Eh bien, je suis en train de gzdeflate mon code pour effectuer un certain niveau de cryptage très faible pour la distribution, à utiliser avec eval(gzinflate('deflated_code'));gzinflate erroring

Cependant chaque fois que je tente de gonfler la chaîne dégonflé, il émet une erreur.

Par exemple:

echo(gzdeflate('test')); sorties +I-.�

Mais lorsque je tente de echo(gzinflate('+I-.�')); il émet seulement Warning: gzinflate() [function.gzinflate]: data error

Y at-il quelque chose que je suis absent? Pourquoi sort-il cette erreur plutôt que test?

Répondre

4

La sortie de

$s = gzdeflate('test'); 
for ($i=0; $i<strlen($s); $i++) { 
    printf("%02X ", ord($s[$i])); 
} 

est 2B 49 2D 2E 01 00. Les deux derniers octets 01 00 sont dans ce cas la partie délicate. Vous avez utilisé echo pour imprimer le résultat "chaîne". Quel était le support de sortie?
Lorsque je copie la chaîne +I-.� via ultraedit dans le script, la sortie est 2B 49 2D 2E 3F. Un résultat différent et la cause de gzinflate() pour renflouer.

Si vous devez vraiment afficher les données dans un support qui ne peut pas afficher tous les "caractères" possibles dans le résultat de gzdeflate(), vous devez encoder le résultat de sorte que ces caractères non imprimables soient évités ou encodés dans un forme appropriée pour ce milieu, p.ex. via base64_encode().

+0

Vous ne savez pas ce que vous entendez par milieu? Et comment puis-je obtenir le bon je suppose, «imprimable» chaîne, de sorte que je peux le gonfler correctement? De plus, j'utiliserai aussi la base64, mais je veux aussi cela pour un "cryptage" supplémentaire si je peux l'appeler ainsi. – Rob

+0

Donc, 'echo (base64_encode (gzdeflate ('string')));'? – Rob

+0

Vous avez utilisé echo pour envoyer les données à quelque chose qui a imprimé la chaîne. Où l'avez-vous envoyé? (Pour un navigateur html comme firefox?) Et pourquoi l'avez-vous envoyé là? (Est-ce quelque chose qu'un utilisateur devrait pouvoir copier et coller?). Par exemple. si vous aviez enregistré le résultat de gzinflate() dans un fichier via file_put_contents() et que vous l'aviez lu via file_get_contents(), il n'y aurait pas eu de problème. Le «problème» en ce moment, c'est qu'il y a quelque chose entre les deux qui interprète les données. Et il interprète la séquence d'octets 01 00 différente de ce que vous attendez/voulez. – VolkerK

Questions connexes