C++ Builder-szyfrowanie

0

Kto wie jak napisać taki program:
w TForm1::Edit2Change chce by tekst ktory ktos wpisze(haslo) zostalo zaszyfrowane przez jakas funkcje po czym zostalo zapisane do pliku(zaszyfrowane-do pliku ini bo to najprosciej) i pozniej w innym polu Edit wczytane to haslo ale rozszyfrowane. Calosc polega na tym by ktos nie mogl zajrzec do pliku ini i zobaczyc hasla. Gdy bedzie poproszony o haslo program powinien wczytac rozszyfrowane haslo z pliku. Metode szyfrowania sugeruje zamienienie bitow kodu ascii kazdej litery(czyli ~)
tu tkwi wlasciwie glowny problem bo ciezko jakis tekst z edit(ansistring) rozbic na litery, pozamieniac bity kazdej litery i zwrocic wyraz juz zlozony zaszyfrowany. I mnie funkcja szyfrujaca wygladala tak :

char szyfr(char a)
{
char c[10]; //o dziwo wyswietla blas array size unknown or 0 wiec wpisalem 10
for(b=0;b<(Edit1->Text.Length+1);a++){
c[a]=~a[b];
}
return c;
}

na pewno gdzies tu powinny byc wskazniki ale jakos do konca nie kumam tych wskaznikow wiec please pomozcie!!!!!!!!!!!!!!!!!

0

To nie tak sie robi. Wpisane przez usera haslo mieszasz szyfrem jednokierunkowym (tj. takim, ktorego nie da sie odszyfrowac) i zaszyfrowane zapisujesz w pliku ini. Kiedy user ponownie wpisze haslo, zeby sie dostac do systemu, szyfrujesz to haslo tym samym algorytmem i porownujesz zaszyfrowana wersje z wersja z pliku. Jesli sie zgadzaja, to go wpuszczasz.

Nie pamietam jak sie wydobywa znaki z TEdit w C++ Builderze i nie mam mana pod reka, ale jesli masz haslo w char* to mozesz szyfrowanie napisac sobie np. tak (jeden z bardzo wielu sposobow):

void szyfruj(char* haslo)
{
const int A = 11; // dowolne > 0
const int B = 17; // dowolne > 0

int hash = 0;
for (int i = 0; haslo[i] != '\0'; i++) 
hash += haslo[i] * seed + A;
for (int i = 0; haslo[i] != '\0'; i++) 
{
haslo[i] += hash;
hash += haslo[i] * seed + B;
}
}

To nie tak sie robi. Wpisane przez usera haslo mieszasz szyfrem jednokierunkowym (tj. takim, ktorego nie da sie odszyfrowac) i zaszyfrowane zapisujesz w pliku ini. Kiedy user ponownie wpisze haslo, zeby sie dostac do systemu, szyfrujesz to haslo tym samym algorytmem i porownujesz zaszyfrowana wersje z wersja z pliku. Jesli sie zgadzaja, to go wpuszczasz.

Nie pamietam jak sie wydobywa znaki z TEdit w C++ Builderze i nie mam mana pod reka, ale jesli masz haslo w char* to mozesz szyfrowanie napisac sobie np. tak (jeden z bardzo wielu sposobow):

// < cpp > Croolik

0
void szyfruj(char* haslo)
{
  const int A = 11; // dowolne > 0
  const int B = 17; // dowolne > 0
 
  int hash = A;
  for (int i = 0; haslo[i] != '\0'; i++) 
     hash += haslo[i] * hash + A;
  for (int i = 0; haslo[i] != '\0'; i++) 
  {
     haslo[i] += hash;
     hash += haslo[i] * hash + B;
   }
}
0
void szyfruj(char* haslo)
{ 
  //...
}
  //...
szyfruj(Edit1->Text.c_str());
0
void szyfruj(char* haslo)
{ 
  //...
}
  //...
szyfruj(Edit1->Text.c_str());

Nie. Niedobrze. Powinno byc tak:

char* haslo = strdup(Edit1->Text.c_str());
szyfruj(haslo);

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