sYnest Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 Also es gibt ein Update: Der dritte Parameter gibt an wie viele Zeichen das verschlüsselte Passwort haben soll. Zitieren
TDM Geschrieben 1. September 2008 Geschrieben 1. September 2008 ...besagt, dass das so funktionieren kann ? Nein, das war mir nur konventionsmäßig aufgefallen. Jetzt wäre die Frage, wie verschlüsselt wird, quasi, welcher parameter verändert oder neu zugewiesen wird, das könnte nämlich auch einen Fehler erklären bei Arrays. Zitieren
sYnest Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 Der erste Parameter enthält das einfache Passwort, in den zweiten wird das verschlüsselte Passwort geschrieben und der dritte Parameter beschreibt die Länge des verschlüsselten Passworts. Zitieren
Guybrush Threepwood Geschrieben 1. September 2008 Geschrieben 1. September 2008 Dann solltest du in den ersten Parameter auch mal was reinschreiben evtl wirft die Funmktion ja eine Exception wenn der leer ist? Zitieren
sYnest Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 char s1[100]; s1[0] = 't' ; s1[1] = 'e' ; s1[2] = 's' ; s1[3] = 't' ; s1[4] = '0' ; s1[5] = '1' ; char s2[8]; int n1 = 8; try { if(function(s1, s2, n1)) { cout << "Verschlüsselung erfolgreich!" << endl; } else { cout << "Verschlüsselung nicht erfolgreich!" << endl; } } catch (...) { cout << "Catchbereich: " << endl; cout << "'"; for (int i = 0; i < n1; i++) { cout << s2[i]; } cout << "'" << endl; } Hatte ich probiert ;D Aber er landet immer im Catchblock Die Verschlüsselung startet anscheinend. Im ersten Zeichen meines verschlüsselten Passworts steht eine 6 ;D Jedoch weiterhin nur gefüllt mit Blanks (siehe Anhang). Meine Umgang mit den Arrays ist hoffentlich richtig so? Zitieren
TDM Geschrieben 1. September 2008 Geschrieben 1. September 2008 Hatte ich probiert ;D Aber er landet immer im Catchblock Vielleicht mal noch s2 als normalen Zeiger. Meine Umgang mit den Arrays ist hoffentlich richtig so? char s1[100] = "test01"; Zitieren
Guybrush Threepwood Geschrieben 1. September 2008 Geschrieben 1. September 2008 nein du musst das Array mit einer 0 abschließen weil dadurch in C das Ende markiert wird. Also s1[5] = 0; [/PHP] Aber einfacher wäre es, wie oben schon geschrieben, einfach strcpy zu verwenden das das automatisch macht, also: [PHP] strcpy(s1,"test01"); Ohne die 0 am Ende läuft die Funktion wahrscheinlich so lange über den Speicher bis irgendwo eine 0 steht und wenn dabei Speicher versucht wird zu lesen der dir nicht gehört dann gibts nen Fehler. Zitieren
sYnest Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 char s1[100] = "test01"; char s2[100] = "test01"; int n1 = 8; if(function(s1, s2, n1)) { cout << "Verschlüsselung erfolgreich!" << endl; cout << s2 << endl; } else { cout << "Verschlüsselung nicht erfolgreich!" << endl; } !Passwort wurde korrekt verschlüsselt! Probleme, die ich jetzt noch habe sind 2 Mal das Auftreten von dem Konventionsfehler. 1 x vorm Aufruf von s2 und 1 x nachdem ich das Verschlüsselte Passwort ausgegeben hab oO Zitieren
Guybrush Threepwood Geschrieben 1. September 2008 Geschrieben 1. September 2008 Was meinst du mit "dem Aufruf von s2"? Versuchs mal so wie ich geschrieben habe: char s1[100]; char s2[100]; strcpy(s1,"test01"); int n1 = 8; if(function(s1, s2, n1)) { cout << "Verschlüsselung erfolgreich!" << endl; cout << s2 << endl; } else { cout << "Verschlüsselung nicht erfolgreich!" << endl; } [/PHP] Bin mir da gerade nicht so sicher deswegen sag ich erst hinterher wieso Zitieren
sYnest Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 Leider auch mit deinem Code die beiden Fehler. Was mich irritiert: Konventionsfehler tritt auf bevor oder während die Funktion aufgerufen wird, dann wird das neue verschlüsselte Passwort ausgegeben. Nachdem das geschehen ist kommt im Code ja eig. nichts mehr, aber es tritt trotzdem nochmal ein Konventionsfehler auf. Zitieren
Guybrush Threepwood Geschrieben 1. September 2008 Geschrieben 1. September 2008 Was auftritt ist ein Speicherzugriffsfehler wenn das Programm beendet wird und versucht wird den Speicher wieder freizugeben. Da aber irgendein Speicherbreich in der Funktion durch falschen Aufruf zerstört wurde, schlägt dies fehl Zitieren
sYnest Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 Also ein Speicheraddressierungsfehler sieht für mich anders aus! Gibt es nicht die Möglichkeit, dass ich den Bereich händig wieder freigebe ? iwie mit Delete ? Zitieren
sYnest Geschrieben 2. September 2008 Autor Geschrieben 2. September 2008 Ich habe jetzt mal die beiden Speicheraddressierungsfehler, die man per Button Ignorieren kann, ignoriert und die JNI einbindung begonnen. C++ JNIEXPORT jstring JNICALL Java_database_Crypt_IpsEncrypt (JNIEnv * env, jobject obj, jstring name) { HINSTANCE hLib = NULL; hLib = LoadLibrary(IPS_ENCRYPT); typedef bool (*pIpsEncrypt)( char *, char *, int ); pIpsEncrypt function = reinterpret_cast< pIpsEncrypt >( GetProcAddress( hLib, "IpsEncrypt" ) ); if(hLib != NULL){ if( function != NULL ) { char s1[100]; char s2[100]; strcpy(s1, env->GetStringUTFChars(name, false)); int n1 = 8; function(s1, s2, n1); printf(s2); return env->NewStringUTF( s2 ); } } printf("Null returned"); return NULL; }[/PHP] Java: [PHP]public Crypt() { System.loadLibrary("CallAvPass32DLL.dll"); try { System.out.println("Passwort: " + IpsEncrypt("test01")); } catch (Exception e) { e.printStackTrace(); } } Das Ergebnis ist verblüffend Also vorab: Der Aufruf funktioniert nun. Aber das Ergebnis im Sysout meines Java Debuggers ist folgendes: Unhandled exception Type=Segmentation error vmState=0x00040000 J9Generic_Signal_Number=00000004 ExceptionCode=c0000005 ExceptionAddress=0006FCCE ContextFlags=0001003f Handler1=7EFB0630 Handler2=7F057A80 InaccessibleAddress=C5857CAE EDI=CCCCCCCC ESI=CCCCCCCC EAX=C5857CAE EBX=CCCCCCCC ECX=7C91056D EDX=00000020 EIP=0006FCCE ESP=0006FC94 EBP=4143EB9C Module= Module_base_address=00030000 Offset_in_DLL=0003fcce Target=2_30_20070322_12058_lHdSMR (Windows XP 5.1 build 2600 Service Pack 2) CPU=x86 (1 logical CPUs) (0x7f666000 RAM) JVMDUMP006I Processing Dump Event "gpf", detail "" - Please Wait. JVMDUMP007I JVM Requesting System Dump using 'O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\core.20080902.102947.3144.dmp' JVMDUMP010I System Dump written to O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\core.20080902.102947.3144.dmp JVMDUMP007I JVM Requesting Snap Dump using 'O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\Snap0001.20080902.102947.3144.trc' JVMDUMP010I Snap Dump written to O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\Snap0001.20080902.102947.3144.trc JVMDUMP007I JVM Requesting Java Dump using 'O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\javacore.20080902.102947.3144.txt' JVMDUMP010I Java Dump written to O:\11\AZUBIS\Jg2007\Haas\Java\ConfirmationOfBooking\javacore.20080902.102947.3144.txt JVMDUMP013I Processed Dump Event "gpf", detail "". ZKVNS114 Man sieht am Ende der Fehler folgt der printf mit dem verschlüsselten Passwort, aber der Sysout im meinem Java Code der eigentlich auch mein verschlüsseltes Passwort ausgeben soll wird nicht mehr ausgeführt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.