Avatar billede darkdruid Nybegynder
29. december 2003 - 10:51 Der er 30 kommentarer og
1 løsning

Hjælp til eregi_replace()

Hejsa...
Jeg sidder her og prøver på at lave en "kodemaskine" hvor man skal kunne kryptere og dekryptere teksten igen.
Jeg kan bare ikke få den til at gøre som jeg vil have det.
Den måde som den krypterer teksten på er ret enkelt...
f.eks.: a=å, b=ø, c=æ og omvendt når man dekrypterer.
Men når jeg skriver f.eks. hele alfabetet:
abcdefghijklmnopqrstuvxyzæøå
bliver det krypteret om til:
abcdefghijklmnnmlkjihgfedcba

I kan godt se hvad fejlen er... den "cutter" alfabetet i midten og begynder at gå baglæns.
I kan se selve scriptet her -> http://darkdruid.frac.dk/sider/coder.phps

Jeg håber der er nogen der kan hjælpe mig.



/out Dark Druid
Avatar billede billen Nybegynder
29. december 2003 - 10:55 #1
Det er en lidt sjov kryptering. Hvis man først har krypteret den bliver det lidt svært at afkryptere igen. Du har jo kun halvdelen af alfabetet med nemlig.
Avatar billede billen Nybegynder
29. december 2003 - 10:55 #2
Det er også lidt overkill at bruge eregi_replace()... Du kan nøjes med str_replace()
Avatar billede billen Nybegynder
29. december 2003 - 10:57 #3
Lidt løst sagt skal du have alt dette i din krypter og i din dekrypter

$code=str_replace("a","å","$code");
$code=str_replace("b","ø","$code");
$code=str_replace("c","æ","$code");
$code=str_replace("d","z","$code");
$code=str_replace("e","y","$code");
$code=str_replace("f","x","$code");
$code=str_replace("g","v","$code");
$code=str_replace("h","u","$code");
$code=str_replace("i","t","$code");
$code=str_replace("j","s","$code");
$code=str_replace("k","r","$code");
$code=str_replace("l","q","$code");
$code=str_replace("m","p","$code");
$code=str_replace("n","o","$code");
$code=str_replace("å","a","$decode");
$code=str_replace("ø","b","$decode");
$code=str_replace("æ","c","$decode");
$code=str_replace("z","d","$decode");
$code=str_replace("y","e","$decode");
$code=str_replace("x","f","$decode");
$code=str_replace("v","g","$decode");
$code=str_replace("u","h","$decode");
$code=str_replace("t","i","$decode");
$code=str_replace("s","j","$decode");
$code=str_replace("r","k","$decode");
$code=str_replace("q","l","$decode");
$code=str_replace("p","m","$decode");
$code=str_replace("o","n","$decode");
Avatar billede billen Nybegynder
29. december 2003 - 10:57 #4
ja, der skulle selvfølgelig stå $code og ikke $decode alle stederne
Avatar billede darkdruid Nybegynder
29. december 2003 - 10:57 #5
Det skal så lige siges at jeg er fuldstændig nybegynder inden for PHP...
Men øh... jeg skal bare bytte eregi_replace ud med str_replace og så tilføje resten af alfabetet?..
Avatar billede darkdruid Nybegynder
29. december 2003 - 10:58 #6
ok... jeg prøver lige...
Avatar billede billen Nybegynder
29. december 2003 - 10:59 #7
$code=str_replace("a","å","$code");
$code=str_replace("b","ø","$code");
$code=str_replace("c","æ","$code");
$code=str_replace("d","z","$code");
$code=str_replace("e","y","$code");
$code=str_replace("f","x","$code");
$code=str_replace("g","v","$code");
$code=str_replace("h","u","$code");
$code=str_replace("i","t","$code");
$code=str_replace("j","s","$code");
$code=str_replace("k","r","$code");
$code=str_replace("l","q","$code");
$code=str_replace("m","p","$code");
$code=str_replace("n","o","$code");
$code=str_replace("å","a","$code");
$code=str_replace("ø","b","$code");
$code=str_replace("æ","c","$code");
$code=str_replace("z","d","$code");
$code=str_replace("y","e","$code");
$code=str_replace("x","f","$code");
$code=str_replace("v","g","$code");
$code=str_replace("u","h","$code");
$code=str_replace("t","i","$code");
$code=str_replace("s","j","$code");
$code=str_replace("r","k","$code");
$code=str_replace("q","l","$code");
$code=str_replace("p","m","$code");
$code=str_replace("o","n","$code");
Avatar billede erikjacobsen Ekspert
29. december 2003 - 10:59 #8
Prøv


  $a["a"] = "å";
  $a["b"] = "ø";
  $a["c"] = "æ";
  $a["d"] = "z";
  $a["e"] = "y";
  $a["f"] = "x";
  $a["g"] = "w";
  $a["h"] = "v";
  $a["i"] = "u";
  $a["j"] = "t";
  $a["k"] = "s";
  $a["l"] = "r";
  $a["m"] = "q";
  $a["n"] = "p";
  $a["o"] = "o";
  $a["p"] = "n";
  $a["q"] = "m";
  $a["r"] = "l";
  $a["s"] = "k";
  $a["t"] = "j";
  $a["u"] = "i";
  $a["v"] = "h";
  $a["w"] = "g";
  $a["x"] = "f";
  $a["y"] = "e";
  $a["z"] = "d";
  $a["æ"] = "c";
  $a["ø"] = "b";
  $a["å"] = "a";



  $s1="abekatte råb";
  $s2=strtr($s1,$a);
  $s3=strtr($s2,$a);

  print "$s1 - $s2 - $s3\n";
Avatar billede billen Nybegynder
29. december 2003 - 11:05 #9
evt.

$crypt = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å" };

$decrypt = { "å", "ø", "æ", "z", "y", "x", "w", "v", "u", "t", "s", "r", "q", "p", "o", "n", "m", "l", "k", "j", "i", "h", "g", "f", "e", "d", "c", "b", "a" };


$code = str_replace( $crypt, $decrypt, $code );
Avatar billede darkdruid Nybegynder
29. december 2003 - 11:05 #10
den laver stadig det samme nummer billen :(
Avatar billede billen Nybegynder
29. december 2003 - 11:06 #11
$decode = str_replace( $decrypt, $crypt, $decode );
Avatar billede billen Nybegynder
29. december 2003 - 11:08 #12
Ja det er klart. Du ændrer jo fra a=>å og fra å=>a igen... Prøv min anden løsning (eller erikjakobsens)
Avatar billede darkdruid Nybegynder
29. december 2003 - 11:11 #13
Når din bruger din anden løsning kommer der kun dette frem: Parse error: parse error, unexpected '{' in /web/www/frac/users/darkdruid/sider/coder.php on line 10

Og erikjakobsens fatter jeg slet ikk :/
Avatar billede billen Nybegynder
29. december 2003 - 11:13 #14
Argh... det er fordi jeg skriver en forkert syntaks...

$crypt = array( "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å" );

$decrypt = array( "å", "ø", "æ", "z", "y", "x", "w", "v", "u", "t", "s", "r", "q", "p", "o", "n", "m", "l", "k", "j", "i", "h", "g", "f", "e", "d", "c", "b", "a" );
Avatar billede billen Nybegynder
29. december 2003 - 11:14 #15
og så brug str_ireplace() i steden.
Avatar billede billen Nybegynder
29. december 2003 - 11:15 #16
nah... med mindre du har php5, så skal du nok bruge eregi_replace i steden
Avatar billede darkdruid Nybegynder
29. december 2003 - 11:23 #17
Nu udskriver den bare det som er indtastet i feltet :/
Avatar billede erikjacobsen Ekspert
29. december 2003 - 11:26 #18
Hvad er det du ikke forstår i min kode ?
Avatar billede darkdruid Nybegynder
29. december 2003 - 11:28 #19
erik >> Det hele.... er jo newbie i php :s
Avatar billede erikjacobsen Ekspert
29. december 2003 - 11:32 #20
Jeg vil ikke forklare "det hele" - enten spørger du mere specifikt eller også finder
du noget nemmere at lære af ;)
Avatar billede darkdruid Nybegynder
29. december 2003 - 11:48 #21
Når jeg bruger eregi_replace eller ereg_replace udskriver den bare det som er blevet indtastet i feltet.
Og når jeg bruger str_replace laver det samme nummer som den også gjorde i starten.
Avatar billede erikjacobsen Ekspert
29. december 2003 - 11:52 #22
Det er fordi hver replace starter forfra. så allerede erstattede ting bliver erstattet igen.
http://dk2.php.net/strtr kan du læse at strtr derimod:

  "... will *NOT* try to replace stuff that it has already worked on. "
Avatar billede darkdruid Nybegynder
29. december 2003 - 12:10 #23
Aaaah... tak fordi du gad finde det.. nu forstår jeg det bedre og har også fået det til at virke..
Mange tak for hjælpen :D

Nu mangler jeg bare et svar jeg kan godkende ;)

I kan selv se om det virker -> http://darkdruid.frac.dk/?side=coder
Har dog også fundet ud af at jeg kun behøves det ene felt.. skal også lige have det lavet sådan at man også kan bruge store bogstaver.

Mange mange mange tusind tak :D
Avatar billede erikjacobsen Ekspert
29. december 2003 - 12:12 #24
Nej tak, jeg vil ikke have point, når der er afsat alt for mange.

Du skal være opmærksom på at i dette tilfælde er kryptering og dekryptering identisk,
men det er ikke nødvendigvis tilfældet. Du kan dog blot lave 2 arrays, eet til hver vej.
Avatar billede darkdruid Nybegynder
29. december 2003 - 12:14 #25
Jamen... hvor skal jeg så gøre af point'ene?
Avatar billede erikjacobsen Ekspert
29. december 2003 - 12:16 #26
Du kan gøre det lidt smartere.


  $a1="abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVXYZÆØÅ0123456789";
  $a2="0123456789abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVXYZÆØÅ";

  for ($i=0;$i<strlen($a1);$i++) {
    $a[$a1[$i]]=$a2[$i];
    $b[$a2[$i]]=$a1[$i];
  }

  $s1="14 abeKATte råber i skoven: LØB";
  $s2=strtr($s1,$a);
  $s3=strtr($s2,$b);

  print "$s1 - $s2 - $s3\n";
Avatar billede darkdruid Nybegynder
29. december 2003 - 12:36 #27
hvad gør det her? ->
  for ($i=0;$i<strlen($a1);$i++) {
    $a[$a1[$i]]=$a2[$i];
    $b[$a2[$i]]=$a1[$i];
  }
Avatar billede erikjacobsen Ekspert
29. december 2003 - 12:42 #28
Laver det array der krypterer, $a, og det der dekrypterer, $b.
Et "a" bliver til "0", som så igen bliver til "a". Der skal bare
være det samme antal tegn i $a1 og $a2, og hvert tegn kun een gang.
Avatar billede darkdruid Nybegynder
29. december 2003 - 12:50 #29
aaaah... smart.
Avatar billede erikjacobsen Ekspert
29. december 2003 - 12:56 #30
og det gør ikke noget jeg har glemt "W" ;)

Men det er bestemt ikke en sikker kryptering efter vore dages standard.
Det regnede du nok heller ikke med...
Avatar billede darkdruid Nybegynder
29. december 2003 - 22:22 #31
Jeg tror jeg er kommet på en lidt bedre kryptering...
Men hva... tusind tak for hjælpen erik :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester