Zmienna z jednej funkcji użyta do drugiej funkcji

0

Heja, może napiszę od razu że jestem zielony w programowaniu.... Otóż mam napisać program do kodowania i odkodowywania podawanego hasła. Mam tu kilka problemów... ponieważ przez jedną funkcję koduję a przez drugą rozkodowuję to samo hasło i nie chcę żeby użytkownik wpisywał hasło przy wybraniu opcji 2. a nie umiem umieścić w funkcji rozkodowywującej tablicy z hashem(zmiennej) z funkcji kodującej.... any ideas?

 #include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream> 
using namespace std;
const int S=300;
const int Q=500;
int liczba;

wchar_t tab[]=
    {
        '?','/','.','>','<',',','M','N','B','V',
        'C','X','Z','A','S','D','F','G','H','J',
        'K','L',';',':','"','|',']','}','{','[',
        'P','O','I','U','Y','T','R','E','W','Q',
        '+','=','-','_','0',')','(','9','*','8',
        '%','5','4','$','3','#','@','2','!','1',
        '~','`','q','w','e','r','t','y','u','i',
        'o','p','a','s','d','f','g','h','j','k',
        'l','z','x','c','v','b','n','m','&','7',
        '6','^',
    };
typedef struct{
        wchar_t tab[S]; //moze byc tez char
        int dl;
        string p;
}struktura;
struktura strpassword()
{
            struktura strpassword;
            cout<<"\nPlease enter your password: ";
            cin>>strpassword.p;
            return strpassword;
}
struktura encryptor(struktura strpassword)
{
    struktura nowatab;
    for(int i=0;i<strpassword.p.length();i++)
        nowatab.tab[i]=0;
    for(int j=0; j<strpassword.p.length();j++)
        for(int i=0;i<92;i++)
            if(strpassword.p[j]==tab[i])
                nowatab.tab[j]=i;//kodowanie hasla

   
    for(int d=0;d<strpassword.p.length();d++)
        cout<<nowatab.tab[d]<<",";
        cout<<endl;                   //wyswietlanie nowataba
    
        return nowatab;
    
        /*FILE *plik = fopen("hashbejbi.txt", "w");//w - oznacza, że //otwieramy plik do zapisu.

        for(int i = 0; i < strpassword.length(); i++)
        {
        fprintf(plik, "%d ", nowatab[i]);
        }

        fclose(plik);
    */
         
}
struktura decryptor(struktura password)
{
    for(int i=0;i<password.p.length();i++)
        cout<<password.p;
    struktura nowanowatab;
    for(int j=0;j<5;j++)
        for(int i=0;i<92;i++)
            if(password.tab[j]==i)
                nowanowatab.tab[j]=tab[i];
    for(int i=0;i<5;i++)
        cout<<nowanowatab.tab[i];
    return 0;
};

int main()
{
    cout<<"   ###    PASSWORD ENCRYPTOR(1)   ###       "<<endl;
    cout<<"   ###     HASH DECRYPTOR(2)      ###       "<<endl;
    cout<<"   ###      SEEK & FIND (3)       ###       "<<endl;
    cout<<"   ###          EXIT(0)           ###       "<<endl;
    cin>>liczba;
    switch(liczba)
    {
    case 1: 
        {
            system("CLS");
            cout<<"### PASSWORD ENCRYPTOR ###\n\n"<<endl;
            cout<<"initializing encryption stream # .......\n"<<endl;
            system("PAUSE");
            encryptor(strpassword());
        }
    case 2:
            {
                cout<<"### PASSWORD DECRYPTOR ###\n\n";
                decryptor(encryptor(strpassword()));
                system("PAUSE");
                system("CLS");
            }

    case 0: break;
    default: cout<<"jeszcze raz..."<<endl;
    }
    
    return 0;
}

0

Z twojego opis wynika chyba, że potrzebujesz zmienną ze struktury, żeby potem mów odkodować. To może zadeklaruj globalnie strukturę i do niej zapisuj? Przy decryptorze przekażesz ją i po problemie.

0

Twój problem rozumiem (a w zasadzie nie rozumiem o co Ci chodzi) mniej więcej tak: zmienną, gdzie zapisujesz te hasło zrób jako globalną dzięki czemu będziesz mógł jej użyć w funkcji a i b. Czemu tak? Ano temu, że funkcje a i b i umieszczone w nich zmienne mają swój zakres tzw. lokalny czyli nie możesz w funkcji a stworzyć zmiennej a w funkcji b zmienić tą zmienną.
Oto przykład:

 #include <iostream>
using namespace std;

void f()
{
int a = 5;
cout << a << endl;
}

void ff()
{
    int a = 10;
    cout << a << endl;
}

int main()
{
    f();
    ff();
    f();
    ff();
}

Masz tutaj dwie różne funkcje i dwie różne zmienne!

Tak zrozumiałem twój problem..jeżeli nie o to Ci chodziło to sorki.

0

pierwsze WTF:

struktura strpassword()
{
            struktura strpassword;
            cout<<"\nPlease enter your password: ";
            cin>>strpassword.p;
            return strpassword;
}

drugie WTF

typedef struct{
        wchar_t tab[S]; //moze byc tez char
        int dl;
        string p;
}struktura;

trzecie, to te wchar_t.
I póki co nawet nie doszedłem do funkcji szyfrującej i odwrotnie, ale jestem pewien,że musisz podejść do tego inaczej..
Powiedz jaką metodą szyfrujesz te hasła?

struct struktura{
    wchar_t tab[S]; 
    int dl;
    string p;
};

tab - to ciąg do zaszyfrowania/zaszyfrowany?
dl - to długość?
p - to password?

0

szyfruje wg numeru indeksu wchar_t tab ... jeżeli litera w haśle odpowiada literze w tablicy, to wtedy numer indeksu tej tablicy jest zapisywany do zmiennej. I tą zmienną chcę zastosować w drugiej funkcji. A jak użyć tej zmiennej jako globalnej? W sensie jak to wstawić do kodu.... Bo ustawiłem to jako zmienną globalną i nadal nie działa...

0

Zapisz Sobie te cyferki do vectora..
Za wydajne, to nie jest, ale łatwiej to ogarnąć,,

#include <iostream>
#include <string>
#include <vector>
using namespace std;
const string tab="?/.><,MNBVCXZASDFGHJKL;:|]}{[POIUYTREWQ+=-_0)(9*8%54$3#@2!1~`qwertyuiopasdfghjklzxcvbnm&76^";
vector<int> encryptor(string txt){
    vector<int>t;
    for(int i=0;i<txt.size();i++){
        t.push_back(tab.find(txt[i]));
    }
    return t;
}
int main(){
    vector<int>tab=encryptor("Tomasz");
    for(int i=0;i<tab.size();i++)
        cout<<tab[i]<<endl;
    return 0;
}

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