• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Random Password [C++] [ankieta]

Object Storage Arubacloud
0 głosów
1,536 wizyt
pytanie zadane 22 kwietnia 2016 w Nasze projekty przez TheFeniks Gaduła (4,690 p.)
edycja 23 kwietnia 2016 przez TheFeniks

Cześć !

Ukończyłem kolejny projekt.

    Random Password

Jak sama nazwa wskazuje jest to generator haseł :)

Paczka z programem: http://sendfile.es/pokaz/779810---ieiz.html

Dla osób które chcą tylko zerknąć na kod:

main.cpp: http://wklej.org/id/2328533/

list.h: http://wklej.org/id/2328536/

methods.cpp: http://wklej.org/id/2328539/

Kopiowanie kodu zabronione !

Proszę o opinie dotyczącą programu jak i kodu.

Pozdrawiam i dzięki za odpowiedzi, i głosy w ankiecie!

Możliwe odpowiedzi:
Fajny (4 głosów, 36%)
Przeciętny (7 głosów, 64%)
Słaby (0 głosów)

4 odpowiedzi

+5 głosów
odpowiedź 23 kwietnia 2016 przez niezalogowany
wybrane 26 kwietnia 2016 przez TheFeniks
 
Najlepsza
Słaby ten generator, pomijam już słabą jakość kodu i błędy w nazwach, więc skupię się na samym generatorze.

Przede wszystkim używasz chyba najgorszego możliwego sposobu generowania liczb pseudolosowych (rand() ) i to nawet bez ziarna losowości uzależnionego choćby od czasu, o tym pisałem choćby tutaj: http://szymonsiarkiewicz.pl/artykuly/relog/pwnable/

Idźmy dalej: używasz tylko alfabetu (sugeruje to zakres losowanych znaków), a co z cyframi, znakami specjalnymi? Zauważmy, że mając kilka haseł wygenerowanych pod rząd to można spróbować odgadnąć seed -> wygenerować dowolną ilość haseł i to bez twojego programu tworzących je w ten sam sposób

Samo generowanie hasła też nie wygląda jakoś imponująco (mówię o tym "wyciętym" kodzie - nie wiem czy wiesz, ale ten kod co jest  w pliku ma cały "algorytm")
komentarz 23 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Dzięki za odpowiedź. :)

Co do słabej jakości kodu. Co jest w nim nie tak ?

A co do błędów w nazwach chodzi ci o nazwy zmiennych czy jakieś literówki ?
komentarz 23 kwietnia 2016 przez niezalogowany
  1. Zmienne globalne
  2. Wielokrotne includy tego samego bez stosownego makra / ifdefa
  3. Błędy w nazewnictwie convert oraz na wyjściu, niesławne "chasła"
  4. system("cls")
  5. Nazewnictwo plików (konwencja wymaga aby plik .h i .cpp nazywały się tak samo jak klasa, czyli Password.cpp Password.h)
  6. 1 linia - wiele instrukcji
  7. Blok if'ów w mainie (lepiej było dać zastosować elif)
  8. Zamiana znaków na bloku ifów, można to było spokojnie upakować w jednej tablicy charów, gdzie nr indeksu odpowiadałby literze, co by znacznie usprawniło poruszanie się dostawanie się do konkretnego elementu
komentarz 23 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
1.Gdzie tu są zmienne globalne ?

2.Co do tego "ifdefa" to nie wiem co to jest :P. Fakt są zainkludowane niepotrzebne biblioteki.

3.Ok zamienię convert. "chasła" już poprawiłem na "hasła" :P

4.Co jest złego w "cls" ? To że jest częścią windows.h i może nie działać na innych systemach ?

5. Poprawie.
1
komentarz 23 kwietnia 2016 przez niezalogowany
1. sry, mój błąd - źle zauważyłem, hwnd miał inne wcięcie i przy szybkiej analizie jakoś źle przyuważyłem

2. https://stackoverflow.com/questions/1143936/pragma-once-vs-include-guards

4. system to funkcja uruchamiająca komendę systemową, cls to czyszczenie konsoli w Windowsie (Linux: "reset" lub "clear") (w dodatku zachowanie jest dość niefajne względem osób, które normalnie korzystają z terminala, bo tu chce uruchomić sobie twój program, a tu czyścisz mu całą konsolę), i tak nie przejmujesz się multi-platformowością ze względu na użycie windowsowego liba (np. SetConsole...). Więc nie tyle co może nie działać, ale twój kod nie działa na innych systemach bez modyfikacji kodu

Może moje posty zabrzmiały jako straszny hejt i krytykę, bo poza poruszonych przeze mnie kwestii reszta jest ok, z racji że się uczysz i jesteś na dość wczesnym etapie to nie możesz mieć wszystkiego idealnie, bo jest całkiem dobrze (jak na nowicjusza).

Moja krytyka ma na celu zahamowanie zbyt dużego samozachwytu, który mógł się pojawić po wcześniejszych komentarzach zachwalających całość jako nieskończenie idealną; także: dobra robota, nie mniej jest jeszcze trochę rzeczy do nauki (hasło przewodnie: "Do it better!")

Jeszcze taka dodatkowa uwaga odnośnie funkcji rand(): to że miałbyś ziarno zależne jedynie od czasu to nie byłoby tak super złe pod warunkiem, że program działałby jedynie lokalnie na komputerze, a nie np na jakimś serwerze (gdzie byłby to straszny błąd).
komentarz 26 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
edycja 26 kwietnia 2016 przez TheFeniks
Dzięki za taką konstruktywną krytykę. Bardzo cenna odpowiedź. :)

Mam jedno pytanie:

Co moge użyć zamiast "cls" ?

I SetConsole ?

Jeszcze raz dzięki i pozdrawiam !
komentarz 26 kwietnia 2016 przez niezalogowany
Heh, tutaj wchodzimy w dość ciekawą problematykę mianowicie nie zrobisz uniwersalnego programu bez wydzielenia go na poszczególne systemy.

O ile dobrze widzę, to używasz SetConsoleTextAttribute tylko do zmieniania kolorów, ten sam efekt można osiągnąć przy użyciu ANSI Escape Sequence, jednakże ten feature wrócił dopiero do Windowsa 10 po wielu latach nieobecności (podczas gdy Linuxy go mają "od zawsze"), także dla pełnego zachowania kompatybilności z starszymi systemami z rodziny Windows i posiadania kolorów musisz używać systemowego API ;)

Dalej, moja uwaga głównie dotyczyła tego, że perfidnie usuwasz dane z konsoli, czy tego użytkownik chce czy nie (jak dla mnie możesz to robić nawet przez system, albo tak jak tutaj https://support.microsoft.com/en-us/kb/99261), jako użytkownik chciałbym abyś przed zakończeniem programu przywrócił środowisko takie jakie zastałeś, tzn: przy uruchomieniu programu zapisujesz zawartość konsoli -> robisz na niej co chcesz (usuwasz, zmieniasz palete kolorów, ...), ale przed samym wyjściem przywracasz środowisko (później podrzucę tutaj jakiś gotowy kod jak to zrobić)
komentarz 30 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)

A co z biblioteką: 

#include <unistd.h>

w jednym odcinku C++ MZ. Mówi że:

"Jeżeli jesteś na linux'ie" użyj tej biblioteki".

To jak to jest ? Są tam funkcje czyszczące ekran,zmieniające kolory ?

komentarz 30 kwietnia 2016 przez niezalogowany
Skoro używałeś winapi to myślałem, że chcesz się trzymać bliżej systemu, tak: są biblioteki, które są uniwersalne do konsoli np New Curses
komentarz 30 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Chciałbym żeby mój program był kompatybilny z linuxe'm. :)
komentarz 30 kwietnia 2016 przez niezalogowany

To jeżeli faktycznie potrzebujesz kolorów to jej użyj, jednak jest to raczej zbędny feature.

Jeszcze taka sugestia: Osobiście jako użytkownik Linuxa to jeżeli chciałbym użyć takiego programu to wolałbym aby wszystkie opcje ustawiało się za pomocą parametrów, a nie menu, czyli np uruchomienie twojego programu z linii poleceń następująco (razem z przykładowym outputem):

$ passgen 20
7jHEDfZT!QnW!>UEz5>@

Takie użycie oznaczałoby, że oczekuję 20 znakowego hasła, w ten sposób pozbywamy się tego całego menu, które mówiąc szczerze jest raczej męczące (załóżmy że chcę wygenerować 100 haseł: robi się problem, a tak mógłbym uruchomić to bardzo łatwo w pętli).

Btw do przechwytywania parametrów służą 2 pierwsze argumentu funkcji main

int main(int argc, char** argv, char** envp)

Pierwszy to ilość argumentów (zawsze jest przynajmniej 1), drugi to tablica parametrów, trzeci który cię nie interesuje to tablica zmiennych środowiskowych

+1 głos
odpowiedź 22 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Ałłłłł moje oczy. Te "chasła" mnie zniszczyły ;) Poza tym jest całkiem w porządku.
komentarz 22 kwietnia 2016 przez Patryk Krajewski Nałogowiec (26,170 p.)
Każdy znak odpowiada jakiejś liczbie w tabeli ASCII: https://pl.wikipedia.org/wiki/ASCII gdybym dodawał do liczb od 1 do 25 97 i przekształcał to na znak char(liczba ASCII) nie musiałbym tyle ifów dawać w przypadku małych liter.
komentarz 22 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Przeanalizowałem to na spokojnie ale za nic nie mogę sobie wyobrazić działania takiego kodu. Mógłbyś pokazać przykład na podstawie 3-4 znaków na jakiej zasadzie miało by to pracować? Byłbym zobowiązany.
1
komentarz 23 kwietnia 2016 przez niezalogowany

@Konrad Aby poznać sposób działania wystarczyłoby (alternatywnie):

  1. Wrzucić to dowolnego debuggera i sprawdzić jakie litery są ustawiane przy wylosowaniu konkretnych liczb
  2. Użyć dowolnego deasemblera i przeanalizować kod
  3. Zauważyć, że autor nie usunął sposobu generowania hasła z kodu udostępnionego razem z plikiem wykonywalnym

Wybieranie liczb to zwykłe przestawienie wartości, np tutaj 1 otrzymuje wartość 'l', 2 = 'b', itd

1
komentarz 23 kwietnia 2016 przez Patryk Krajewski Nałogowiec (26,170 p.)
Tu masz mój program do generowania małych liter: http://wklej.org/id/2331512/
komentarz 23 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Coś tak prostego? o.O Nie wierzę że nie mogłem czegoś takiego wymyślić. Dzięki wielkie :)
+1 głos
odpowiedź 22 kwietnia 2016 przez Sedi Stary wyjadacz (10,200 p.)
Tak z ciekawości,jak długo pisałeś ten programik i skąd pomysł na stworzenie generatora haseł ?:)
komentarz 22 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Dzisiaj napisałem ciała metod w jakieś 40 min.

Ogólnie to 1.5 tygodnia. A tak naprawde to w dniu wymyślenia programu zrobiłem main.cpp,list.h i cały"plan" co gdzie i jak :P. To myślę że w sumie samego kodzenia i planowania to było z 1,5 godz. :) Pomysł wzią się po obejrzeniu odcinka MZ o stringach i łańcuchach. :P
–1 głos
odpowiedź 23 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Odświeżam temat.

Podobne pytania

0 głosów
6 odpowiedzi 405 wizyt
pytanie zadane 15 kwietnia 2016 w Nasze projekty przez TheFeniks Gaduła (4,690 p.)
+1 głos
0 odpowiedzi 1,006 wizyt
pytanie zadane 6 listopada 2017 w Nasze projekty przez L33TT12 Gaduła (3,950 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 19 marca 2018 w Nasze projekty przez Secrus Nałogowiec (32,880 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...