Brauche Hilfe mit RC4 Verschlüsselung
-
Hallo,
ich wollte eigentlich die RC4 Verschlüsslung in meinem Programm nutzen.
Habe da jetzt mal was geschrieben,aber der String wird nicht richtig entschlüsselt/verschlüsselt.
Bin echt schon total am Verzweifeln weil ich keinen Fehler finde.
Hier mal der Code:#include <stdio.h> #include <stdlib.h> #include <string.h> void rc4(unsigned char * ByteInput, unsigned char *pwd,unsigned char *ByteOutput) { unsigned char * temp; int i,j=0,t,tmp,tmp2,s[256], k[256]; for (tmp=0;tmp<256;tmp++){ s[tmp]=tmp; k[tmp]=pwd[(tmp % strlen(pwd))]; } for (i=0;i<256;i++){ j = (j + s[i] + k[i]) % 256; tmp=s[i]; s[i]=s[j]; s[j]=tmp; } temp = calloc(strlen(ByteInput)+1,sizeof(char)); i=0; j=0; for (tmp=0;tmp<(int)strlen((char *)ByteInput);tmp++){ i = (i + 1) % 256; j = (j + s[i]) % 256; tmp2=s[i]; s[i]=s[j]; s[j]=tmp2; t = (s[i] + s[j]) % 256; if (s[t]==ByteInput[tmp]) temp[tmp]=ByteInput[tmp]; else temp[tmp]=s[t]^ByteInput[tmp]; } temp[tmp]='\0'; sprintf(ByteOutput,"%s",temp); } int main() { char temp[128]; //rc4("Test","test",temp); rc4("·ÛTe","test",temp); printf("Temp: %s\n",temp); }
Kann jemand mal bitte den Code kurz überfliegen?
Komme alleine nicht mehr weiter..
-
Hi
Ja hast du schonmal was von einem MOD gehört ?
Kannst nicht einfach RC4 benutzen und so zbsp. den stream verschlüsseln, musst das schon in verbindung mit einem MOD wie CBC - OFB etc. machen. Eben je nach dem für was du es brauchst.
RC4 würde ich nicht mehr benützen. Gibt sicheres und schnelleres !
Und benutze Library's , die auch sicher sind im bezug auf implementierung. Da es bei einem Fehler ,verheerende folgen auf die sicherheit des Ciphertextes geben wird!Ist das nicht ein bisschen langsam ?
temp = calloc(strlen(ByteInput)+1,sizeof(char));
Wo hast du den Code den her ?
lowbyte
: http://www.administrator.de/SPC23_-_512-Bit_Block_Cipher_Algorithm.html
-
void rc4(unsigned char * ByteInput, unsigned char *pwd,unsigned char *ByteOutput) {
würde ich erstmal so machen:
void rc4(unsigned char *ByteInput,size_t inputsize,const char *pwd,unsigned char *ByteOutput)
und damit kann dann strlen entfallen, da ja wohl in den Nutzdaten auch mal eine Binär-Null (=strlen-Kennung) vorkommen kann.
-
Hi
Da eine Binäre 0 nicht dargestellt werden kann so wie andere Zahlencodes.. kannst du das 8Bit array nicht einfach mit Printf() ausgeben. Musst das hex ausgeben, damit es darstellbar wird.
for(i=0;i<len;i++) { printf("0x%.2x ,",string[i] ); }
So in einer Schleife die anzahl benötigter werte oder eben bis zur String länge ausgeben lassen.
Und auch sonnst würde ich dir mal empfehlen anderen RC4 Code anzuschauen.
lowbyte
-
Habe den Code über die Googlesuche gefunden.
Danke für den Link,werd mich mal ransetzen.
Warum ist den calloc() zu langsam? Ist mir neu...
Was sollte man den dann benutzen anstatt calloc()?
-
Hi
Wie viel verstehst du von Kryptographie, bzw. dessen implementierung ?
lowbyte