2009-01-30 6 views
1

je voudrais brouiller tous les a-zA-Z donc un monde commelettres php embrouillage

bonjour devient shrxs ou bhidf

le reste doit rester le même. par ex. "Bonjour tout le monde!" = "ksgii fishl!"

etc.

+0

La chose importante à considérer est de savoir à quoi vous voulez brouiller le texte, et ce que vous voulez en faire par la suite. Par exemple, faut-il pouvoir le déchiffrer? Ou devrait-il devenir simplement un texte aléatoire et indéchiffrable? – Ben

+0

pouvez-vous être plus concret, voulez-vous brouiller systématiquement ou totalement aléatoire? – markus

Répondre

9

On ne sait pas si cela est destiné à être réversible, voici donc deux réponses alternatives. "Hello" devenir "shrxs" implique un schéma qui va au-delà de la simple substitution (un caesar cipher) et peut-être quelque chose comme un chiffre polyalphabétique.

Mais pour un chiffre simple caesar vous pouvez utiliser strtr

$plain="hello"; 
$cipher = strtr($plain, 
    "abcdefghijklmnopqrstuvwxyz", 
    "tuvhijkcwxyzldefgsmnopqrab"); 
echo $cipher; 

afficherait "cizze";

Si vous n'avez pas besoin d'inverser le brouillage, et que vous voulez quelque chose de vraiment aléatoire, essayez cette

function random_char($matches) 
{ 
    return chr(rand(ord('a'),ord('z'))); 
} 

$plain="hello"; 

$random=preg_replace_callback(
      "{[a-z]}i", 
      "random_char", 
      $plain); 

echo $random; 

Ici, nous utilisons preg_replace_callback pour avoir chaque CHAR remplacé par une alternative au hasard par le rappel random_char.

+0

+1 strstr peut faire n'importe quel chiffrement de substitution simple (pour ce que ça vaut qui n'est pas beaucoup) – cletus

1

Que voulez-vous dire par «brouillage»? Je peux voir que vous ne réarrangez pas ou ne comptez pas les lettres à travers l'alphabet.

Il semble que vous vouliez simplement savoir comment remplacer uniquement les caractères a-zA-Z. Donc, quel que soit votre fonction de transformation peut-être, c'est une façon, vous pouvez le faire:

$result = preg_replace_callback('/[a-zA-Z]/', 'charTransform', $oldstring); 

Définissez ensuite la transformation comme un rappel:

function charTransform($matches) { 
    $oldchar = $matches[0]; 
    return strtolower($oldchar); // replace with whatever you want 
} 
+0

Battu à nouveau! –

1

La question est, voulez-vous que le texte brouillé ou crypté, c'est-à-dire le texte devrait-il être déchiffrable ou non? Si vous voulez juste toutes les lettres remplacées par une autre lettre au hasard, vous pouvez essayer quelque chose comme ceci:

$text = "Hello world!\n"; 
$text = preg_replace_callback(
     '/[a-zA-Z]/', 
     create_function('$matches', 'return chr(rand(97,122));'), 
     $text 
    ); 
4

Vous aimerez aussi regarder la fonction str_rot13, qui a l'avantage d'être réversible aussi.

<?php 
    var $foo = "hello world!"; 
    var $bar = str_rot13($foo); // $bar equals "uryyb jbeyq!" 
    var $baz = str_rot13($bar); // $baz equals "hello world!" 
?> 
Questions connexes