Buffer-Überlauf?

NRFi

Erfahrenes Mitglied
Hallo auch, die folgende Funktion sollte eigentlich erstmal ein char-array auf eine bestimmte größe füllen.

beispiel:

Code:
KEY = "asdfijosjfsaf";

key2[20]
dann soll key in
Code:
key2 = "asdfijosjfsafasdfijo";
gefüllt werden.

aber der ist so doof und macht das nicht, dieses sch**** ding regt mich auf :mad:
der füllt das ding entweder nur mit drei komischen zeichen, oder mit irgendwelchen anderen daten.
woran liegt es, dass er in der einen schleife Key[j] nicht mit daten von PUBLIC_KEY[k] füllt?

wenn dann in der schleife wie unten

Code:
				j++;
				cout << Key[j];
steht, kommt mist raus, aber

Code:
				j++;
				cout << Key[j-1];
klappt es, dann kommen plötzlich die daten raus. aber wieso macht der denn müll?

Code:
char *EncryptString(char *PlainText)
{
	long lTextLen = strlen(PlainText + 1); //length of plaintext
	long lKeyLen = strlen(PUBLIC_KEY); //length of key
	int CipherChar = 0;                                 //ascii-value of char
	char *Key = new char[lTextLen];           //key
	
	double lLen = (double)lTextLen / (double)lKeyLen;
	if (lLen > (int)lLen)
	{
		lLen = (int)lLen++;
	}

	if (lLen <= 0) lLen = 1;
	
	int j = 0;
	if (lTextLen > lKeyLen)
	{
		for(int i = 0; i < lLen; i++)
		{
			for(long k = 0; k < lKeyLen; k++)
			{ 
				if (j > lTextLen) break;
				//cout << lTextLen << ": " << j << "  " << PUBLIC_KEY[k] << "->" << Key[j] <<  endl;
				Key[j] = PUBLIC_KEY[k];
				j++;
				cout << Key[j];
			}
			if (j > lTextLen) break;
		}
	}
	cout << Key << endl;
	Key[lTextLen] = '\0';

	char *Cipher = new char[j];

	for(int i = 0; i < lTextLen; i++)
	{
		CipherChar = (int)Key[i] + 7;
		if (CipherChar > 255)
		{
			Cipher[i] = (char)CipherChar - 255;
		}
		else
		{
			Cipher[i] = (char)CipherChar;
		}
	}
	Cipher[lTextLen] = '\0';
	cout << lTextLen << endl;
	//char *newCipher = new char[lTextLen];
	
	//strcpy(newCipher, Cipher);
	//cout << endl << strlen(newCipher) << " -> " << lTextLen << endl;
	//cout << endl << Cipher;
	return Cipher;
}
 
Zuletzt bearbeitet:
Unformatierter Code ist bestenfalls nervtötend.
Bitte Codetags verwenden! Danke.
Code:
   // hierhin den Code!

codetags.gif


<ot>Wieso werden hier übrigens keine Bilder angezeigt?</ot>
 
Zuletzt bearbeitet:
Code:
char *Key = new char[lTextLen];
Hier reservierst du Platz für lTexlen chars. Die gültigen Indizes laufen von 0 bis Textlen - 1. Soweit okay.

Code:
if (j > lTextLen) break;
//cout << lTextLen << ": " << j << "  " << PUBLIC_KEY[k] << "->" << Key[j] <<  endl;
Key[j] = PUBLIC_KEY[k];
j++;
cout << Key[j];
Hier fangen die Probleme an. Soweit ich das beurteilen kann, kann hier in der letzten j nicht nur den Wert lTextLen , sondern sogar lTextLen + 1 erreichen, und das ist 2 chars hinter das Ende des Arrays. Selbst Key[j] mit j == lTextLen ist nicht zulässig, da lTextLen -1 der höchstmögliche Index ist.
 
Zurück