ROT13 Verschlüsselung
-
Hallo!
Hier ist eine kleine ROT13 Funktion, die ich geschrieben habe. Ich hoffe manche haben Verwendung für sie. Feedback wäre auch nicht schlecht.
// ROT13-Verschlüsselung // Mit dieser in C/C++ geschriebenen Funktion kann man einen String ROT13 codieren. // Hinweis: Puffer auf dem Heap mit delete[] löschen, sonst entstehen Speicherlücken! // 100% ANSI/ISO kompatibel #ifndef _STRING_H_ #include <string.h> #endif #ifndef _ROT13_ #define _ROT13_ char* rot13(const char* szString) { // Größe des char-Arrays ermitteln unsigned int szStringSize = static_cast<int> (strlen(szString)); // Wenn die Stringlänge 0 ist dann Funktion beenden if(szStringSize == 0) return 0; // Dynamischer Puffer char* Buffer = new char[szStringSize + 1]; // Groß- und Kleinbuchstaben char upperCase[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"; char lowerCase[] = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"; // Per Paramter übergebenen String im Puffer speichern for(unsigned int i = 0; i < szStringSize; ++i) { Buffer[i] = szString[i]; } // String nullterminieren Buffer[szStringSize] = '\0'; // Pufferinhalt ROT13 codieren for(unsigned int i = 0; i < szStringSize; ++i) { for(unsigned int j = 0; j < 26; ++j) { if(Buffer[i] == upperCase[j]) { Buffer[i] = upperCase[j + 13]; break; } else if(Buffer[i] == lowerCase[j]) { Buffer[i] = lowerCase[j + 13]; break; } } } // Zeiger vom Puffer auf dem Heap zurückgeben return Buffer; } #endif
-
Das ist eher C. Auch wenn du static_cast und new verwendest.
-
Das Programm ist größtenteils C, aber es wäre ja lächerlich diese kleine Funktion in eine Klasse zu packen.
-
aber std::string hättest du schon verwenden können
-
...der Benutzer muss ja den Speicher freigeben, den Du in der Funktion alloziierst, was nicht so schön ist.
-
vielleicht magste ne idee von http://www.linuxhilfen.org/c/c_aufsteiger_rot.html einbauen.
-
Nun, ich dachte, dass meine Funktion sehr kurz ist, aber seht euch mal das anhttp://hea-www.harvard.edu/~fine/Tech/rot13.html.
-
ich hab deinen code etwas angepasst:
std::string rot13(std::string Buffer){ //array leicht gekürzt, da nur die ersten 39 zeichen(26+13) benutzt werden char upperCase[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM"; char lowerCase[] = "abcdefghijklmnopqrstuvwxyzabcdefghijklm"; for(unsigned int i = 0; i < Buffer.size(); ++i) { for(unsigned int j = 0; j < 26; ++j) { if(Buffer[i] == upperCase[j]) { Buffer[i] = upperCase[j + 13]; break; } else if(Buffer[i] == lowerCase[j]) { Buffer[i] = lowerCase[j + 13]; break; } } } return Buffer; }
//edit c&p fehler
-
Stormrage schrieb:
Nun, ich dachte, dass meine Funktion sehr kurz ist, aber seht euch mal das anhttp://hea-www.harvard.edu/~fine/Tech/rot13.html.
Du weisst schon, was Obfuscated Code Contests sind?
-
@groovemaster: Ja, habs gerade hier http://en.wikipedia.org/wiki/Obfuscated_code nachgelesen.