Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> pomocy c++ szyfrowanie, c++
alvnia
post 5.12.2014, 22:01:22
Post #1





Grupa: Zarejestrowani
Postów: 0
Pomógł: 0
Dołączył: 5.12.2014

Ostrzeżenie: (0%)
-----


Witam. Mam do napisania program, ktory szyfruje/deszyfruje tekst za pomoca klucza. Zarowno tekst jak i klucz podaje uzytkownik. Szyfrowanie/deszyfrowanie realizujemy za pomoca tablicy 26x26 znakow:

A B C D E F G H I J K L M N O P R S T U W X Y Z
B C D E F G H I J K L M N O P R S T U W X Y Z A
C D E F G H I J K L M N O P R S T U W X Y Z A B
.
.
.
Y Z A B C D E F G H I J K L M N O P R S T U W X
Z A B C D E F G H I J K L M N O P R S T U W X Y

Przykładowe szyfrowanie tekstu LOREM IPSUM DOLOR SIT AMET kluczem PASSWORD:

1. W przypadku gdy klucz jest krotszy od szyfrowanego tekstu, nalezy go powielic:
LOREM IPSUM DOLOR SIT AMET
PASSW ORDPA SSWOR DPA SSWO

2. Szyfrowanie polega na podstawieniu liter tekstu jawnego przez litery z tablicy wg zasady:

a ) litera tekstu jawnego wyznacza kolumnie tablicy
b ) litera klucza wyznacza wiersz

Litera szyfrogramu lezy na przecieciu, przyklad:
LOREM IPSUM DOLOR SIT AMET
PASSW ORDPA SSWOR DPA SSWO
AOJWI WGVJM VGHCI VXT SEAH

3. Deszyfracja polega na wybraniu kolumny tablicy okreslonej poprzez odpowiednia litere klucza, a nastepnie odszukanie w niej litery szyfrogramu. W ten sposob okreslona litera wiersza jest litera tekstu jawnego:
PASSW ORDPA SSWOR DPA SSWO
AOJWI WGVJM VGHCI VXT SEAH
(np.dla pierwszego znaku : w kolumnie P szukamy A, lezy ona w wierszu L-L jest wiec poszukiwana litera)

dodaje ze jestem poczatkujaca i prosze o wyrozumialosc, a to ile udalo mi sie poskladac:






#include <iostream>
#include <cstdlib>

using namespace std;

void szyfruj(char *tekst,int *klucz)
{
int iPrzes;
for (int i=0; tekst[i] != '\0'; i++)
{
tekst[i] = ( tekst[i] + klucz[iPrzes] );
iPrzes ++;
cout << "wpisz tekst:";
cin>>iPrzes;
if(iPrzes == sizeof(klucz)) iPrzes;
break;
}
}
void deszyfruj(char *tekst,int *klucz)
{
int iPrzes;
for (int i=0; tekst[i] != '0'; i++)
{
tekst[i] = ( tekst[i] - klucz[iPrzes] );
iPrzes ++;
cout << "zaszyfrowany tekst:";
cin>>iPrzes;
if(iPrzes == sizeof(klucz)) iPrzes;
break;
}

}

int main(){

char test[30];
int iKlucz[3] ;
szyfruj(test, iKlucz);
cout << test << "\n" ;
deszyfruj(test, iKlucz);
cout << test << "\n" ;
return 0;
system("pause");
}
Go to the top of the page
+Quote Post
r4xz
post 5.12.2014, 23:03:29
Post #2





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

Ostrzeżenie: (0%)
-----


A z czym dokładnie masz problem?


--------------------
Go to the top of the page
+Quote Post
alvnia
post 5.12.2014, 23:06:51
Post #3





Grupa: Zarejestrowani
Postów: 0
Pomógł: 0
Dołączył: 5.12.2014

Ostrzeżenie: (0%)
-----


wiem juz ze musze stworzyc tablice dynamiczna dwuwymiarowa. teraz zastanawiam sie gdzie powinnam ja umiescic zeby dobrze dzialala. w tych dwoch petlach ? smile.gif
Go to the top of the page
+Quote Post
Wazniak96
post 6.12.2014, 09:46:30
Post #4





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


To zadanie polega na kombinowaniu, jednak potrzeba już w nim trochę tego myślenia jak program i trochę wiedzy. Nie potrzebne są tu praktycznie tablice, poczytaj lepiej o kodowaniu znaków w ANSII i rzutowaniu litery na ANSII i na odwrót.

Ostatnio robiłem podobny program do szyfrowania kluczem, jednak był on trochę mniej skomplikowany. smile.gif

PS: To forum dotyczy PHP i tematów webowych. Nie będę tutaj już podawać linków ale istnieje także forum dotyczące cpp...
Go to the top of the page
+Quote Post
Spawnm
post 6.12.2014, 15:01:34
Post #5





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Problem jest natury algorytmicznej, język nie ma znaczenia. Więc jak masz coś ciekawego to śmiało się podziel wink.gif
Go to the top of the page
+Quote Post
r4xz
post 6.12.2014, 15:06:04
Post #6





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

Ostrzeżenie: (0%)
-----


Cytat(Spawnm @ 6.12.2014, 15:01:34 ) *
Problem jest natury algorytmicznej, język nie ma znaczenia. Więc jak masz coś ciekawego to śmiało się podziel wink.gif

Ale przecież algorytm jest znany, kwestia przeklejenia do c++ smile.gif


--------------------
Go to the top of the page
+Quote Post
zegarek84
post 6.12.2014, 22:35:07
Post #7





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


nie potrzebujesz pomocniczej tablicy, po za tym pominęłaś 2 znaki alfabetu ASCII ;p ...
poniżej masz rozwiązanie pierwszej części zadania bez pobierania tekstu i klucza z konsoli jako sposób rozwiązania, jeśli w tekście są też małe litery to ten drugi alfabet jest w tablicy znaków występuje później... dodatkowo w tym rozwiązaniu zakłada się, iż klucz składa się tylko z dużych liter alfabetu - po prostu masz zalążek działającego poprawnie kodu:
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. char znak_koduj(const char old, const char key){
  5. if(key=='A')
  6. return old;
  7. int przesuniecie(key - 'A');
  8. int char_new(old + przesuniecie);
  9. if(char_new > 'Z')
  10. {
  11. char_new -= 'Z';
  12. char_new += 'A';
  13. --char_new;
  14. }
  15. return char(char_new);
  16. }
  17.  
  18. string tekst_koduj(const string &tekst, const string &klucz){
  19. string zakodowany(tekst);
  20. int klucz_length = klucz.length();
  21. int znak_alfabetu_w_tekscie(0);
  22. int tekst_length = tekst.length();
  23. for(int pos(0); pos<=tekst_length; ++pos){
  24. char &c = zakodowany[pos];
  25. if(c>='A' && c<='Z')
  26. {
  27. c = znak_koduj(c, klucz[znak_alfabetu_w_tekscie%klucz_length]);
  28. ++znak_alfabetu_w_tekscie;
  29. }
  30.  
  31. }
  32.  
  33. return zakodowany;
  34. }
  35.  
  36. int main()
  37. {
  38. string klucz = "PASSWORD";
  39. string tekst = "LOREM IPSUM DOLOR SIT AMET";
  40.  
  41. cout << tekst_koduj(tekst, klucz) << endl;
  42.  
  43. cout << "Wciśnij enter aby opuścić program" << endl;
  44. return 0;
  45. }


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
alvnia
post 7.12.2014, 09:06:31
Post #8





Grupa: Zarejestrowani
Postów: 0
Pomógł: 0
Dołączył: 5.12.2014

Ostrzeżenie: (0%)
-----


serdecznie dziękuję, to już bardzo dużo smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.05.2024 - 20:18