Gå til innhold

Trenger hjelp med en krypterings funksjon


Anbefalte innlegg

Jeg prøver å lage en funksjon som enkrypterer tekst, men får noen feilmeldinger.

 

Her er feilmeldingen:

D:\C++\Bricked 2\main.cpp|364|error: initializer fails to determine size of `msg'|

 

Her er funksjonen min:

string encrypt(string str, int key)
{
char msg[] = str;
int len = strlen(msg);
char* crypt = (char*)malloc(len + 1);
crypt[len] = 0;
for(int i=1;i<len+1;i++)
{
	crypt[i] = msg[i] ^ key*i;
}
return crypt;
}

Lenke til kommentar
Videoannonse
Annonse

Takk, det virka perfekt. :D

Bare at Giddeon mente vell ikke å ha den arrayen i msg stringen? :p

 

Men så har jeg ett problem til, det er med decrypte funksjonen min.

Den decrypter ikke, tror det ser ut som den bare encrypter den bedre eller noe sånnt.

 

Her er koden:

 

string encrypt(string str, int key)
{
string msg = str;
int len = str.size();
char* crypt = (char*)malloc(len + 1);
crypt[len] = 0;
for(int i=1;i<len+1;i++)
{
	crypt[i] = msg[i] ^ key;
}
return crypt;
}

string decrypt(string str, int key)
{
string msg = str;
int len = str.size();
char* crypt = (char*)malloc(len + 1);
crypt[len] = 0;
for(int i=1;i<len+1;i++)
{
	crypt[i] = msg[i] ^ key;
}
return crypt;
}

 

Hvis det kunne hjelpe noe, så her er måten jeg gjør det på utenfor en funksjon, som virker:

 

string msg = "Hello World!";
int len = msg.size();
char* crypt = (char*)malloc(len + 1);
crypt[len] = 0;
for(int i=1;i<len+1;i++)
{
	crypt[i] = msg[i] ^ i;
}
cout << "Encrypted: " << crypt << endl;
for(int i=1;i<len+1;i++)
{
	msg[i] = crypt[i] ^ i;
}
cout << "Decrypted: " << msg << endl;

Lenke til kommentar

Det skal ikke være nødvendig å blande C og C++ på den måten du gjør der. I de fleste tilfeller trenger du aldri å bruke arrays manuelt slik du gjør der. Alt kan behandles av container klasser fra STL.

 

string transform(sting& input, char key)
{
 string ret;

 for(int i = 0; i < input.size(), i++)
ret += input[i] ^ key;

 return ret;
}

Tror jeg skal fungere (har ikke C++ på denne maskinen)

Lenke til kommentar

Neinei, skjønner det, men det var den eneste metoden jeg visste om.

Fordi jeg vet ikke helt hvordan jeg kan ta bokstav for bokstav å xor-e i c++.

 

Men koden din gav en feilmelding:

 

D:\C++\Bricked 2\main.cpp|376|error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'const char*'|

 

Her er den:

 

string crypt(string& input, char key)
{
 string ret;
 for(int i=0;i<input.size();i++)
 {
  ret += input[i] ^ key;
 }
 return ret;
}

 

Mer hvorfor bruker du char som key? Jeg bruker alltid int.

Lenke til kommentar

Fordi du ikke får xor-et en char med en int allikevel, men det spiller egentlig ingen rolle.

 

Feilmeldingen kan være fordi funksjonen jeg skrev tar string og ikke char* som ikke kan castes direkte. Bruk constructor til string for å danne en string fra en char*

 

Igjen, ikke bruk char* eller andre arrays uten noen god grunn for det. Det vil føre til at du får færre minnelekasjer i lengden ^^

Endret av GeirGrusom
Lenke til kommentar

Ojaa, hadde jo glemt å fjerne c_str() funskjonen fra istad.

Men nå får jeg fortsatt en feilmelding:

 

D:\C++\Bricked 2\main.cpp|376|error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'std::string'|
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...