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

question-closed Własny program szyfrujący - 2 pytania (początkującego)

Object Storage Arubacloud
+1 głos
356 wizyt
pytanie zadane 1 października 2016 w C i C++ przez 4sp3ll Początkujący (410 p.)
zamknięte 3 października 2016 przez 4sp3ll

WSTĘP:


Witam,

pracuje nad napisaniem programu szyfrującego który w zbiorze przypadkowych cyfr będzie ukrywał litery.

Przykład (Ctrl+f >> znajdź 9):

999999964786547996476599999994638364899999956.996995574999999

995456765565565997656599686888687677899364995743.995743995647

999999939946994999994699999994999999799999937.994999997999999

6886699599379939946997364739969934566994.99564997993994993735

99999994999999599999439999999599999949946599.6997999996999999

Odstępy między wierszami w edytorze tego posta są bardzo duże, nie wiem czy będzie to widać w samym poście, ale powinien ukazać się naszym oczom napis "Subscribe".

Wymyśliłem sobie, że podzielę takie "wiersze" zbudowane z 5 linii cyfr na obszary po 50 znaków w których będzie jedna litera.

Jestem początkujący - przerobionych 10 lekcji Pana Mirosława na youtube o C++. 

PROTOTYPOWY KOD:


#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <time.h>
#include <windows.h>

using namespace std;

int szufladka[50];
int klucz;
string slowo;

int randWithout(int key)
    {
    int value = rand()%9;
    if (value >= key) {value++;}
    return value;
    }

int main()
{
    cout << "Wpisz klucz (max 1): ";
    cin >> klucz;

    cout << "Wpisz I albo C (max 1): ";
    cin >> slowo;

    srand(time(NULL));
    if  (slowo == "I")
    {
                for (int i=0; i<=49; i+=10 )
                {
                szufladka[i]     = randWithout(klucz);
                szufladka[i+1]   = randWithout(klucz);
                szufladka[i+2]   = randWithout(klucz);
                szufladka[i+3]   = randWithout(klucz);
                szufladka[i+4]   = klucz;
                szufladka[i+5]   = klucz;
                szufladka[i+6]   = randWithout(klucz);
                szufladka[i+7]   = randWithout(klucz);
                szufladka[i+8]   = randWithout(klucz);
                szufladka[i+9]   = randWithout(klucz);

                cout<<  szufladka[i];
                cout<<  szufladka[i+1];
                cout<<  szufladka[i+2];
                cout<<  szufladka[i+3];
                cout<<  szufladka[i+4];
                cout<<  szufladka[i+5];
                cout<<  szufladka[i+6];
                cout<<  szufladka[i+7];
                cout<<  szufladka[i+8];
                cout<<  szufladka[i+9]<<endl;
                }
    }
    if  (slowo == "C")
    {
                for (int i=0; i<=0; i++)
                {
                szufladka[i]     = randWithout(klucz);
                szufladka[i+1]   = klucz;
                szufladka[i+2]   = klucz;
                szufladka[i+3]   = klucz;
                szufladka[i+4]   = klucz;
                szufladka[i+5]   = klucz;
                szufladka[i+6]   = klucz;
                szufladka[i+7]   = klucz;
                szufladka[i+8]   = klucz;
                szufladka[i+9]   = randWithout(klucz);

                cout<<  szufladka[i];
                cout<<  szufladka[i+1];
                cout<<  szufladka[i+2];
                cout<<  szufladka[i+3];
                cout<<  szufladka[i+4];
                cout<<  szufladka[i+5];
                cout<<  szufladka[i+6];
                cout<<  szufladka[i+7];
                cout<<  szufladka[i+8];
                cout<<  szufladka[i+9]<<endl;
                }

                for (int i=10; i<=39; i+=10)
                {
                szufladka[i]     = randWithout(klucz);
                szufladka[i+1]   = klucz;
                szufladka[i+2]   = klucz;
                szufladka[i+3]   = randWithout(klucz);
                szufladka[i+4]   = randWithout(klucz);
                szufladka[i+5]   = randWithout(klucz);
                szufladka[i+6]   = randWithout(klucz);
                szufladka[i+7]   = randWithout(klucz);
                szufladka[i+8]   = randWithout(klucz);
                szufladka[i+9]   = randWithout(klucz);

                cout<<  szufladka[i];
                cout<<  szufladka[i+1];
                cout<<  szufladka[i+2];
                cout<<  szufladka[i+3];
                cout<<  szufladka[i+4];
                cout<<  szufladka[i+5];
                cout<<  szufladka[i+6];
                cout<<  szufladka[i+7];
                cout<<  szufladka[i+8];
                cout<<  szufladka[i+9]<<endl;
                }

                for (int i=40; i<=49; i+=10)
                {
                szufladka[i]     = randWithout(klucz);
                szufladka[i+1]   = klucz;
                szufladka[i+2]   = klucz;
                szufladka[i+3]   = klucz;
                szufladka[i+4]   = klucz;
                szufladka[i+5]   = klucz;
                szufladka[i+6]   = klucz;
                szufladka[i+7]   = klucz;
                szufladka[i+8]   = klucz;
                szufladka[i+9]   = randWithout(klucz);

                cout<<  szufladka[i];
                cout<<  szufladka[i+1];
                cout<<  szufladka[i+2];
                cout<<  szufladka[i+3];
                cout<<  szufladka[i+4];
                cout<<  szufladka[i+5];
                cout<<  szufladka[i+6];
                cout<<  szufladka[i+7];
                cout<<  szufladka[i+8];
                cout<<  szufladka[i+9]<<endl;
                }
    }

return 0;
}

KOMENTARZ I PYTANIA:


Komentarz: Kod wg mnie jest za długi, ale na tym popracuję po przerobieniu wskaźników.

Program na razie obsługuje tylko 2 litery - "I" oraz "C".

Pytania: Obecnie zastanawiają mnie 2 rzeczy:

1. Czy macie jakiś przystępny (dla początkującego) pomysł w jaki sposób mogę spowodować aby program nie rozpoznawał tylko pojedynczych znaków, a ciągi znaków (wyrazy), np. proste "IC" i wykonywał poszczególne instrukcje wg kolejności wpisywania liter?

2. W moim planie "wiersz" z tak zbudowanych liter powinien mieć 5 wierszy oraz 82 kolumny.

W związku z powyższym, w każdym tak zbudowanym "wierszu" powinny zmieścić się 8 zaszyfrowanych liter (każda to 50 szufladek w tabeli).

Czy macie pomysł w jaki sposób spowodować aby poszczególne litery zaszyfrowane były od lewej do prawej, a nie jedna pod drugą? Chodzi o budowanie całych wyrazów aby szyfr był szyfrem :)

Przykład budowy "wiersza" (w każdej szufladce jest cyfra):

 


PODSUMOWANIE:

Nie wiem czy nie rzucam się z motyką na słońce na takim poziomie, ale taki projekt wydaje mi się bardzo interesujący, dzięki czemu dużo ćwiczę, poza tym nigdzie mi się nie spieszy.

Z góry dziękuję za wszystkie komentarze i pomoc! :)

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 1 października 2016 przez niezalogowany
wybrane 3 października 2016 przez 4sp3ll
 
Najlepsza

Prędzej bym to nazwał jakimś zaciemnieniem, ukryciem niż szyfrowaniem, ale mniejsza o nazewnictwo.

Odnośnie twoich pytań

  1. Program ma nie tylko ukrywać napisy, ale i je wykrywać? O to chodzi ci w tym pytaniu?
  2. Musisz zbudować napis analogicznie jak do ASCII artów (http://patorjk.com/software/taag/#p=display&f=Doh&t=Hello%20World)

Ogólnie cały program to prostsza wersja generatora z linku powyżej - tworzysz sobie alfabet znaków, następnie łączysz wszystkie potrzebne litery i podmieniasz znaki, które były wypełniaczami na jakieś inne losowe

Przykład litery (poniżej wypełniaczem jest spacja i po sklejeniu napisu trzeba ją zamienić na inny dowolny znak != '9'):

/* 

 99999
9     9
9999999
9     9
9     9

*/

char* A = " 99999\n9     9\n9999999\n9     9\n9     9\n"

 

komentarz 1 października 2016 przez DragonCoder Nałogowiec (36,500 p.)
edycja 1 października 2016 przez DragonCoder
Tylko nie lepiej zamienic to na jakis cyfry, litery, znaki? Bynajmiej ja tak mysle, zakladajac ze chce przechowywac haslo i kazdy wie ze jest to w folderze, mozna to zaszyfrowac np. kot=

_>|| i przy odczycie zamieniac to na litery
2
komentarz 1 października 2016 przez niezalogowany
Tylko że z tego co rozumiem, to ten program ma nie służyć do szyfrowania, a do "ukrytych" wiadomości, które można odczytać przy użyciu ctrl+f (odpowiednia litera)
komentarz 3 października 2016 przez 4sp3ll Początkujący (410 p.)
edycja 3 października 2016 przez 4sp3ll

 

 które można odczytać przy użyciu ctrl+f (odpowiednia litera)

Taki właśnie miałem plan:)

W przyszłości chciałbym jeszcze rozbudować klucz w taki sposób aby program tworzył napis z wybranych przeze mnie kilku znaków w losowych proporcjach, na przykład tutaj litera "A" z kluczem "R","9","0" (3 znaki):

/* 
 
 R909R
9     0
909R900
9     9
9     R
 
*/
1
komentarz 3 października 2016 przez DragonCoder Nałogowiec (36,500 p.)
To zamista czytac je do nowej lini rob to po spacji i w tym samym wierszu...
komentarz 3 października 2016 przez 4sp3ll Początkujący (410 p.)
Zdałem sobie właśnie sprawę, że to było tak głupie pytanie, że aż edytowałem swoją wypowiedź. Dzięki ;)
komentarz 3 października 2016 przez 4sp3ll Początkujący (410 p.)

Przykład dla litery "A" z dowolnym znakiem jako klucz:


#include <iostream>

using namespace std;

char k;

int main()
{
    cout<< "Wpisz klucz: ";
    cin>>k;
    cout << " "<<k<<k<<k<<k<<k<<"\n"<<k<<"     "<<k<<"\n"<<k<<k<<k<<k<<k<<k<<k<<"\n"<<k<<"     "<<k<<"\n"<<k<<"     "<<k<<"\n"<<" "<< endl;
    return 0;
}

Podobne pytania

0 głosów
1 odpowiedź 286 wizyt
–2 głosów
3 odpowiedzi 2,549 wizyt
pytanie zadane 21 stycznia 2019 w C i C++ przez HaSen Nowicjusz (230 p.)
0 głosów
3 odpowiedzi 1,256 wizyt
pytanie zadane 29 stycznia 2018 w C i C++ przez Cylian Początkujący (280 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...