Proszę o ocenę programu szyfrującego wiadomość (C++) (newbie)

0

Cześć, miesiąc temu zacząłem się bawić programowaniem w C++, jako swój 1. projekt chciałem napisać własny program który będzie szyfrował i odszyfrowywał wiadomości . napisałem go już kolejny raz, staram się poznawać nowe umiejętności i ulepszać go.

oto moje założenia szyfrowania:

  1. program generuje 3 klucze (losowa liczba 3cyfrowa) oraz 3 oznaczniki tych kluczy.
    - kodowanie między kluczami może się powtarzać (nawet wskazane), oznaczniki kluczy są niepowtarzalne.
  2. losuje który klucz wybrać
  3. wpisuje znacznik klucza i koduje wg niego 3 następne znaki.
  4. powtórne losowanie i kodowanie itd. do końca wiadomości
  5. wymieszanie klucza z zaszyfrowaną przez niego wiadomością.

Program jest na pewno napisany łopatologicznie, chciałbym się dowiedzieć czy rażąco ;)
zdaję sobie sprawę, że istnieją funkcje np. liczace ilosc wierszy w pliku, ale chciałem zrobić wszystko sam ;p

Jest to mój 1 program, więc rozpiera mnie duma i myślę, że potrzebuję zarówno jakiegoś upomnienia jak i pochwały :P

najbardziej nie podoba mi się generowanie klucza i ten ogromny if, można to ugryźć pętlą na pewno.

chciałbym się też dowiedzieć czy taki szyfr jest trudny do złamania? nie posiadając oczywiście programu, tylko samą wiadomość.

>> Link do źródła

Uprzejmie dziękuję i czekam na opinie ;)

3

za dużo ifów :(

2
  1. formatowanie kodu do poprawienia
  2. dowiedziec sie roznice miedzy endl a "\n" i dowiedziec kiedy sie co uzywa
  3. main za duzy. Podziel to na jakas logike (sprawdz na moim tutorialu jak to mozna fajnie zrobic za pomoca MVC)
  4. nie ma sensu uzywania tablic. Od tego jest std::array albo std::vector
  5. srand(time(NULL)); powinno robic sie raz wiec do przesuniecia do konstruktora (albo listy inicjalizujacej)
  6. powiedz mi a co jezeli jest tu 10000 elementow?
if ((losowa != klucz1[0])&&(losowa != klucz1[1])&&(losowa != klucz1[2])&&(losowa != klucz1[3])&&(losowa != klucz1[4])&&
     (losowa != klucz1[5])&&(losowa != klucz1[6])&&(losowa != klucz1[7])&&(losowa != klucz1[8])&&(losowa != klucz1[9])&&
     (losowa != klucz1[10])&&(losowa != klucz1[11])&&(losowa != klucz1[12])&&(losowa != klucz1[13])&&(losowa != klucz1[14])&&
     (losowa != klucz1[15])&&(losowa != klucz1[16])&&(losowa != klucz1[17])&&(losowa != klucz1[18])&&(losowa != klucz1[19])&&
     (losowa != klucz1[20])&&(losowa != klucz1[21])&&(losowa != klucz1[22])&&(losowa != klucz1[23])&&(losowa != klucz1[24])&&
     (losowa != klucz1[25])&&(losowa != klucz1[26])&&(losowa != klucz1[27])&&(losowa != klucz1[28])&&(losowa != klucz1[29])&&
     (losowa != klucz1[30])&&(losowa != klucz1[31])&&(losowa != klucz1[32])&&(losowa != klucz1[33])&&(losowa != klucz1[34]))
    {
        klucz1[wylosowano] = losowa;
        wylosowano++;
    }
}

do poczytania o petlach (u mnie na blogu jak chcesz) oraz https://stackoverflow.com/questions/3450860/check-if-a-stdvector-contains-a-certain-object
7) magic numbers
8) DRY
9) te ify da sie uproscic, pomysl jak

i jeszcze jest sporo wiecej, poki co popraw caly projekt zgodnie z tymi uwagami wrzuc poprawiony to dalej Ci powiem co jest do poprawy ;) Nie ma sensu pisac co jest do zmiany, bo jest duzo do zmiany ;)

1

Każda linijka kodu która jest zduplikowana z innymi liczbami lub literami jest do wywalenia.

1

Myślę, że bardzo dobrze jak na miesiąc nauki tylko tych && jest za dużo.

0

Dziękuję wszystkim za odp. tego mi było trzeba ;) wracam do nauki i do pisania. aczkolwiek rozeznałem się trochę w temacie i zamierzam przejść na C#

1 użytkowników online, w tym zalogowanych: 0, gości: 1