Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: szyfrowanie, array_search() i polskie znaki
Forum PHP.pl > Forum > PHP
Jakob
Mam do szkoły przygotować skrypt który bedzie szyfrował i deszyfrował zamieniając kolejne znaki wprowadzonego tekstu według który jest wygenerowany losowo. Siedzę już przy tym trzeci dzień i wymiękam. Najpierw próbowałem generować klucz z tablicy ASCII i bawiłem sie chr() i ord(), ale zawsze były jakieś błędy przy kodowaniu i dekodowaniu(pomylone niektóre znaki itp.). Dzisiaj zrobiłem recznie dwie tablice ze znakami dostępnymi na zwykłej klawiaturze. Pierwsza tablica -litery alfabetycznie i po kolei znaki, a druga wszystko losowo. I tu niby działa ale tam gdzie sie pojawiają polskie znaki są zawsze podmieniane podwójnie na pierwszy element tablicy sciana.gif.
Poniżej zamieszczam link to tego co wykombinowałem. W folderze 1 jest wersja w której próbowałem na ASCII, a w folderze 2 wersja z moimi tablicami:
Pliki

Jeśli ktoś ma na którąś wersje pomysł to prosze o pomoc. Wystarczy że jedna bedzie działała smile.gif
erix
I czego od nas oczekujesz? Gotowca?
Jakob
Nie, nie oczekuje gotowca. Widocznie nieściśle sie wyraziłem i mogło to tak wyglądać. Miałem nadzieje że ktoś rzuci na to okiem i może akurat znajdzie błąd, albo bedzie znał taki problem jaki u mnie wystąpił i poradzi w którą strone kombinować winksmiley.jpg
tehaha
dam Ci wskazówkę: pokaż co zrobiłeś, wklej kody do bbcode w poście a nie jakiś spakowany plik
Jakob
to jest wersja gdzie generowałem klucz przy użyciu chr()
  1. ďťż<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <?php
  9. class ClSzyfrowanie{
  10. private $Wiadomosc;
  11. private $WiadomoscKoncowa;
  12. private $Klucz;
  13. private $dlugosc;
  14. function uruchom(){
  15.  
  16.  
  17. $this->OdczytajKlucz();
  18. if($_GET['GenerujKlucz']=='generuj'){
  19. $this->GenerujKlucz();
  20. }else if($_GET['wiadomosc']!=''){
  21. $this->Wiadomosc = $_GET['wiadomosc'];
  22. $this->dlugosc = strlen($this->Wiadomosc);
  23. if($_GET['dzialanie']=='Koduj'){
  24. $this->WiadomoscKoncowa = 'Zakodowana wiadomość:<br>'.$this->Kodowanie().'<br>';
  25. }else{
  26. $this->WiadomoscKoncowa = 'Odkodowana wiadomość to:<br>'.$this->Dekodowanie().'<br>';
  27. }
  28. }
  29.  
  30. }
  31. function Wyswietl(){
  32. return $this->WiadomoscKoncowa;
  33. }
  34.  
  35.  
  36.  
  37. function OdczytajKlucz(){
  38. $uchwyt =fopen('klucz.txt', 'r');
  39. $klucz= fread($uchwyt, filesize('klucz.txt'));
  40. fclose($uchwyt);
  41. $this->Klucz = explode('[--]',$klucz);
  42. }
  43. function GenerujKlucz(){
  44. echo"Nowy klucz został wygenerowany!";
  45. for($x='0'; $x<='127';$x++){
  46. $ascii[chr($x)]=chr($x);
  47. }
  48. shuffle($ascii);
  49. $NowyKlucz =implode('[--]', $ascii);
  50.  
  51. $uchwyt =fopen('klucz.txt', 'w');
  52. fwrite($uchwyt, $NowyKlucz);
  53. fclose($uchwyt);
  54. }
  55. private function Kodowanie(){
  56.  
  57. for($x=0; $x <= $this->dlugosc-1; $x++){
  58.  
  59. $this->WiadomoscKoncowa .= $this->Klucz[ord($this->Wiadomosc[$x])];
  60.  
  61. }
  62. return $this->WiadomoscKoncowa;
  63. }
  64. private function Dekodowanie(){
  65. for($x=0; $x <= $this->dlugosc-1; $x++){
  66. $this->WiadomoscKoncowa .= chr(array_search($this->Wiadomosc[$x], $this->Klucz));
  67. }
  68. return $this->WiadomoscKoncowa;
  69. }
  70.  
  71.  
  72.  
  73. }
  74.  
  75.  
  76. $Szyfrowanie = new ClSzyfrowanie;
  77. $Szyfrowanie->Uruchom();
  78.  
  79.  
  80. echo $Szyfrowanie->Wyswietl()."
  81. <form acton=szyfrowanie.php method=GET>
  82. WprowadĹş tekst:<input type=text name=wiadomosc><br>
  83. <select name=dzialanie>
  84. <option>Koduj</option>
  85. <option>Dekoduj</option>
  86. </select><br>
  87. <input type=submit value=Przetwrzaj><br>
  88. </form>
  89. <a href=szyfrowanie.php?GenerujKlucz=generuj>Generuj nowy klucz</a><br>";
  90.  
  91.  
  92. ?>
  93. </body>
  94. </html>

wygenerowana tablica ASCII do tego:
  1. [--])[--][--]^[--]][--][--]5[--] [--][--][--][--]
  2. [--]k[--][--]Y[--][--]y[--]([--]|[--]V[--]:[--][--]J[--]A[--][--]i[--][--]C[--]n[--]Z[--]@[--][--]p[--] [--]`[--][--]v[--]=[--]c[--]t[--][[--]3[--]u[--]f[--]b[--]B[--][--]%[--]4[--]6[--][--]0[--]I[--]D[--]9[--]8[--][--]l[--]q[--]\[--]$[--]{[--]M[--]}[--]-[--]d[--]j[--]H[--]N[--][--]?[--]K[--]G[--]a[--]
  3. [--]E[--][--]w[--]m[--]h[--]#[--][--]"[--]W[--]r[--];[--]P[--]S[--][--][--]Q[--]1[--][--]&[--]R[--]e[--]X[--]T[--]U[--]O[--]<[--]*[--],[--][--]+[--]s[--]>[--] [--][--]g[--]_[--]L[--] [--]x[--] [--]2[--][--]z[--]/[--]o[--][--].[--][--]~[--]7[--]F[--]'[--]!


a tutaj ta wercja do której samemu zrobiłem tablice z wybranymi znakami:
  1. ďťż<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <?php
  9. class ClSzyfrowanie{
  10. private $Wiadomosc;
  11. private $WiadomoscKoncowa;
  12. private $Klucz;
  13. private $Tablica;
  14. private $dlugosc;
  15. function uruchom(){
  16.  
  17. $this->WczytajTablice();
  18. $this->OdczytajKlucz();
  19. if($_GET['GenerujKlucz']=='generuj'){
  20. $this->GenerujKlucz();
  21. }else if($_GET['wiadomosc']!=''){
  22. $this->Wiadomosc = $_GET['wiadomosc'];
  23. $this->dlugosc = strlen($this->Wiadomosc);
  24. if($_GET['dzialanie']=='Koduj'){
  25. $this->WiadomoscKoncowa = 'Zakodowana wiadomość:<br>'.$this->Kodowanie().'<br>';
  26. }else{
  27. $this->WiadomoscKoncowa = 'Odkodowana wiadomość to:<br>'.$this->Dekodowanie().'<br>';
  28. }
  29. }
  30.  
  31. }
  32. function Wyswietl(){
  33. return $this->WiadomoscKoncowa;
  34. }
  35. private function WczytajTablice(){
  36. $uchwyt = fopen('tablica.txt', 'r');
  37. $this->Tablica = explode('[@@]',fread($uchwyt, filesize('tablica.txt')));
  38. fclose($uchwyt);
  39. }
  40.  
  41.  
  42. function OdczytajKlucz(){
  43. $uchwyt =fopen('klucz.txt', 'r');
  44. $klucz= fread($uchwyt, filesize('klucz.txt'));
  45. fclose($uchwyt);
  46. $this->Klucz = explode('[@@]',$klucz);
  47. foreach($this->Klucz as $a){
  48. echo"$a";
  49. }
  50. }
  51. function GenerujKlucz(){
  52. echo"Nowy klucz został wygenerowany!";
  53. $ascii = $this->Klucz;
  54. shuffle($ascii);
  55. $NowyKlucz =implode('[@@]', $ascii);
  56.  
  57. $uchwyt =fopen('klucz.txt', 'w');
  58. fwrite($uchwyt, $NowyKlucz);
  59. fclose($uchwyt);
  60. }
  61. private function Kodowanie(){
  62.  
  63. for($x=0; $x <= $this->dlugosc-1; $x++){
  64. $this->WiadomoscKoncowa .= $this->Klucz[array_search($this->Wiadomosc[$x], $this->Tablica)];
  65.  
  66.  
  67.  
  68. }
  69. return $this->WiadomoscKoncowa;
  70. }
  71. private function Dekodowanie(){
  72. for($x=0; $x <= $this->dlugosc-1; $x++){
  73. $this->WiadomoscKoncowa .= $this->Tablica[array_search($this->Wiadomosc[$x], $this->Klucz)];
  74.  
  75.  
  76. }
  77. return $this->WiadomoscKoncowa;
  78. }
  79.  
  80.  
  81.  
  82. }
  83.  
  84.  
  85. $Szyfrowanie = new ClSzyfrowanie;
  86. $Szyfrowanie->Uruchom();
  87.  
  88.  
  89. echo $Szyfrowanie->Wyswietl()."
  90. <form acton=szyfrowanie.php method=GET>
  91. WprowadĹş tekst:<input type=text name=wiadomosc><br>
  92. <select name=dzialanie>
  93. <option>Koduj</option>
  94. <option>Dekoduj</option>
  95. </select><br>
  96. <input type=submit value=Przetwrzaj><br>
  97. </form>
  98. <a href=szyfrowanie.php?GenerujKlucz=generuj>Generuj nowy klucz</a><br>";
  99.  
  100.  
  101. ?>
  102. </body>
  103. </html>

i ta tablica
  1. a[@@]ą[@@]b[@@]c[@@]ć[@@]d[@@]e[@@]ę[@@]f[@@]g[@@]h[@@]i[@@]j[@@]k[@@]l[@@]ł[@@]
    m[@@]n[@@]o[@@]ó[@@]p[@@]r[@@]s[@@]ś[@@]t[@@]u[@@]w[@@]x[@@]y[@@]z[@@]ź[@@]ż[@@]A
    [@@]Ą[@@]B[@@]C[@@]Ć[@@]D[@@]E[@@]Ę[@@]F[@@]G[@@]H[@@]I[@@]J[@@]K[@@]L[@@]Ł[@@]M[
    @@]N[@@]O[@@]Ó[@@]P[@@]R[@@]S[@@]Ś[@@]T[@@]U[@@]v[@@]W[@@]X[@@]Y[@@]Z[@@]Ź[@@]Ż[@
    @]1[@@]2[@@]3[@@]4[@@]5[@@]6[@@]7[@@]8[@@]9[@@]0[@@]`[@@]~[@@]![@@]@[@@]#[@@]$[@@
    ]%[@@]^[@@]&[@@]*[@@]([@@])[@@]-[@@]=[@@]\[@@]_[@@]+[@@]|[@@][[@@]][@@]{[@@]}[@@];[@@]'[@@]:[@@]"[@@],[@@].[@@]/[@@]<[@@]>[@@]?

a klucz do tego jest taki jak tablica tylko kolejność inna

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.