Zum Inhalt springen

Gateway_man

Mitglieder
  • Gesamte Inhalte

    1.162
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Gateway_man

  1. Hi. Das klingt tatsächlich sehr logisch. Ich hab noch ein DVD Laufwerk lose in der Ecke liegen. Das könnte ich für die Installation ja mal fix einbaun (sofern das noch funktionstüchtig ist). Ich glaube das werd ich als aller erstes machen, da es sich wirklich sehr logisch anhört. Vielen Dank für deine Hilfe. Werde morgen mal ne Rückmeldung geben. LG Gateway
  2. Hi Crash2001, danke für deine Tipps. Ich werde das heute Abend mal ausprobieren. Vermutlich schon. Es laufen ja bereits mehrere S-ATA Platten erfolgreich. Werde ich prüfen. Muss mal schaun wie das bei meinem MB Bios geht. Wie kann ich das prüfen? Glaube aber das bei der Installation von Windows Primär und nicht Logisch dran stand. Ansonsten müsste das ja in der Datenträgerverwaltung nachprüfbar sein oder? Hm da weiß ich nicht wie ich das nachprüfe. Werd dazu mal google befragen. Das weiß ich ebenfalls nicht wie ich das prüfen soll, wenn das überhaupt möglich ist. Hm wie ich fehlerhafte Interrupts feststelle weiß ich jetzt auch nicht. Ich dachte da auch noch an ein BIOS Update. Sinnvoll oder nicht? Ein Kollege meinte noch ich solle für die Installation mal alle Festplatten abstecken und nur die eine SSD dran lassen. Zudem meinte er ich solle den AHCI Treiber installieren wenn nicht schon vorhanden. Das müsste ich mal zuhause prüfen. Aber auf der Gigabyte Website gibt es einen Treiber Was wenn ich kein Floppy Laufwerk habe. Ob er den Treiber auch von der DVD lesen kann?! Dann würd ich ne neue WIN7 Installations-DVD brennen mit dem Treiber drauf. LG Gateway
  3. Hallo liebe Leute, ich habe mir eine neue SSD Festplatte (Crosair Force GS 240 GB) gekauft. Ich habe diese verbaut und im Bios wird diese auch ordnungsgemäß angezeigt. Meine alte primär SSD auf der bereits ein Windows 7 64 Bit läuft hab ich vorsichtshalber mal abgesteckt (man weiß ja nie was bei der Installation alles schiefgeht). An der Stelle wollte ich noch anmerken das in meiner Kiste kein DVD Laufwerk verbaut ist und ich das ganze über ein DVD Laufwerk das per USB angeschlossen ist, abwickle. Ich hab also mit meiner Windows 7 Installations-DVD gebootet und die Installation lief reibungslos durch. Gestartet hat er auch (auch von der Festplatte). Jetzt hab ich die Bootreihenfolge wieder geändert (Statt USB-DVD an erster Stelle habe ich Harddisc gewählt). Jetzt sagt mir das System das es kein Operating System gefunden hat. Pack ich das USB-DVD Laufwerk wieder an erster Stelle und leg die Windows Installation ein, startet er plötzlich wieder von der Festplatte (ganz sicher nicht von der DVD). Sehr seltsames verhalten. Ich hatte dann nochmal nen anderen SATA Anschluss am Mainboard versucht und das System nochmal neuinstalliert. Das Ergebnis bleibt das gleiche. Beim dritten Versuch hab ich meine alte SSD wieder angeschlossen und diese als zweites in der Bootreihenfolge (direkt nach der neuen SSD) gestellt. Installation von Windows lief durch und beim ersten Neustart nach der Installation konnte ich noch zwischen den Windows Installation auswählen (beim Booten). Nach kompletter Fertigstellung hab ich das System nochmal neugebootet. Es kam kein Auswahldialog nach dem Bios Screen und er hat wieder von meiner alten SSD gebootet (obwohl diese an zweiter Stelle in der Bootreihenfolge steht). Jetzt sitz ich hier seit 4 stunden für ne simple Windows Installation und verlier fast den Verstand. Ein solches Verhalten hatte ich noch nie. Dann hab ich das Reperaturprogram von der DVD ausprobieren wollen. Dort gibt es die Option mit der Beschreibung: "Wenn Ihr System nichtmehr startet". Das hab ich dann ausgewählt und ich musste lachen. Es kam die Meldung schließen Sie alle USB Devices von Ihrem Rechner ab, starten Sie diesen dann neu und führen Sie diese Aktion erneut aus (wie bereits erwähnt verfüge ich nur über ein USB DVD Laufwerk :beagolisc). Hat jemand noch ne Idee? Hier noch ein paar BIOS Screens: Boot Reihenfolge mit USB Laufwerk an erster Stelle Harddisk Reihenfolge LG Gateway
  4. Super, danke euch beiden. Werde mir alles mal in ruhe ansehen und ausprobieren. LG Gateway
  5. Hi, ich will auf keinen Fall chm Help files. Ich will eine Website die ich auf einem IIS hosten kann. Wie gesagt strukturell soll es so aufgebaut sein wie die msdn. Gibts sowas zu kaufen? Xml Kommentare wird von der IDE sowie der Programmiersprache nicht unterstützt. LG Gateway
  6. Hallo, ich bin mir nicht sicher wo ich es reinpacken soll (gehört für mich jetzt nicht zu Anwendungssoftware). Verschiebt es bitte wenn ich es in der falschen Rubrik erstellt habe. Ich suche nach einem Produkt (einer Website) die es mir erlaubt Klassen und deren member zu beschreiben. Im Prinzip genauso etwas wie die MSDN. Kann gerne etwas kosten, aber es wäre notwendig das man Zugriff auf den Quellcode für das Projekt erhält, sodass man es erweitern/ändern kann. Ist jemandem so etwas bekannt? Optimaler weise ASP.NET, PHP wäre aber auch nicht schlimm. Mein Problem ist, ich weiß nichtmal unter was für einer Begrifflichkeit ich bei Google suchen soll. Auf keinen Fall soll es ein Wiki sein. Ich check die Nutzung dieser Teile bis heute nicht. Für mich total unübersichtlich. Ein Suchfeld irgendwo oben und ansonsten links ein treeview mit den Technologien bzw. geschachtelt den Klassen und rechts die Beschreibungen. LG Gateway
  7. Ah okay. Aber auch wstring muss ja wissen wann die Zeichenkette endet. Wie ermittelt wstring denn die gültige Länge? Denn anscheinend kriegt wstring das richtig hin. Ich habe es übrigens auch statt mit wcslen mit der length Funktion des wstrings erfolglos probiert. Das sagst du so einfach . Das ist die einzige Validierungsmöglichkeit die ich habe. Meinst du das die Debugger Information falsch ist und ich es ignorieren kann? Hm. Wie macht wstring das. Der muss ja auch irgendwie die länge ermitteln?! Was ich übrigens sehr spannend finde ist: Wenn ich anstelle von wcsncpy wcscpy verwendet, zeigt er es zumindest im Designer richtig an. Ich finde das echt total irritierend. Mit deiner vektorlösung und dem wstring funktioniert es. Versuche ich dann aber irgendwie an einen nicht konstanten wchar_t Pointer zu gelangen funktioniert es nicht. Ich greife doch auf die selbe Datei zu. LG Gateway PS: @Klotzkopp: Vielen Dank für deine Hartnäckigkeit und dein Geduld . Jetzt hab ich es endlich gerafft (hat ja auch lang genug gedauert) und hab auch eine Patentlösung und muss auch nicht auf meine wchar_t Pointer verzichten. (Ja ich weiß ich sollte die Finger davon lassen, aber es gibt gewisse Abhängigkeiten) Jetzt versteh ich auch wie du das mit dem Debugger gemeint hast :upps. Danke Interessant wäre es dennoch wie wstring die länge ermittelt, sofern du dahingehend was weißt .
  8. hallo, @flashpixx: Ich glaube wir beide reden aneinander vorbei. Ich weiß ehrlich gesagt beim besten willen nicht, was ich jetzt mit regex anfangen soll :confused:. Danke für deine Hilfe, aber ich versuch mich jetzt wieder an meinem ursprünglichen Problem. Aus reiner Neugier. Beinhaltet die stl überhaupt ein regex Konstrukt? @Klotzkopp: Danke für deinen Hinweis mit der Funktion wcsncpy. Tatsächlich ist es die Funktion die den Inhalt ans Ende hängt. Was ich aber jetzt noch nicht raffe ist, es scheint kein aber keine string Terminierung zu sein. Ich hab den Inhalt nach '\0' durchsuchen lassen ohne Erfolg. Ich raff das nicht. Warum sieht das konstante Array der std::wstring korrekt aus und am unteren Array hängt wieder der mist dran. Also für mich sieht der Schwachsinn am Ende nicht nach einer Null Terminierung aus. Ich hab mir eine eigene "copy" Funktion geschrieben, in der Hoffnung das sich das dann erledigt hat. wchar_t * wccopyex(const wchar_t * input, const size_t index, const size_t count, bool wcsterminate) { wchar_t * result = 0; if (input != 0) { int ia = std::wcslen(input); if (index + count <= ia) { result = new wchar_t[(wcsterminate ? (count + 1) : count)]; for (int i = 0; i < count; i++) { result[i] = input[index + i]; } if (wcsterminate) result[count] = '\0'; } } return result; } Das hat wie man im Screenshot sieht nicht geklappt. Stellt sich raus das er die letzten paar Indexe schon bei der Initialisierung des Arrays setzt. Mir ist gerade aufgefallen, das das result Array auch 40 Elemente hat, was spannend ist, da das eingabe Array lediglich 32 Elemente hat. Ich werde noch irre. Ich flipp echt bald noch aus. Ich will doch lediglich ein nicht konstantes wchar_t Array. Ist das denn zu viel verlangt. Einen ganzen Tag beschäftigt mich der Unfug jetzt schon.... Etwas so triviales das in jeder anderen Sprache in einem drei Zeiler gemacht werden kann und kein absonderliches verhalten verursacht. Quasi die ganze Logik der dahinter liegenden Library arbeitet mit wchar_t Arrays. Aber so brauch ich nichtmal versuchen den Mist zu übergeben....... Ich geh jetzt mal mein Rechner gegen die Wand werfen... LG Gateway
  9. Verstehe gerade nicht was du mir damit sagen willst. Ich weiß auch das es geht. Aber es ist umständlich. Hier ein Beispiel: Ich iteriere ein char Array durch um nach diversen sequenzen zu suchen. wenn ich jetzt prüfen möchte ob der aktuelle character ein match ist, geht das nicht so einfach: if (currentCharacter == 0xe0b8bf) { // hier wird er nie reingehn. Die Bedinung kann nie erfüllt werden, weil der Wertebereich nie groß genug sein wird. // ich hab im Netz schon obskure Lösungswege gesehn. Bis hin zu einer Funktion die immer zwei character eingelesen hat und diese dann miteinander mulitpliziert hat. Aber das war mir zu strange und zu Aufwändig. } Das sah für mich einfach nach zu viel rum gefriggel aus. Daher wchar_t. Da hab ich auch den Vorteil das ich easy auf utf-32 wechseln kann. Und auf fremde Libraries greif ich nur sehr ungern zurück. Also ist Boost jetzt nicht wirklich für mich eine alternative.
  10. Ja. Ich kenne aber auch keine Funktion die nicht von einer Nullterminierung ausgeht. Ich meine woher soll die Funktion dann wissen wann das Ende der Zeichenkette erreicht ist. Ich versteh nicht warum am Ende kein \0 ist. Ich meine nach meinem Verständnis muss doch eigentlich jede Zeichenkette eine Terminierung haben sonst kann man nicht sinnvoll damit arbeiten. Woher soll xyz Funktion wissen, wann die Zeichenkette zu Ende ist?! Ich hab versucht das ganze von Anfang an abzufangen. Also das ursprungsarray schon mit der richtige größe zu erstellen, wenn die Dateigröße kleiner ist als die Buffersize. std::wifstream wif(filename); if (wif.is_open()) { wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>)); int iretval = 0, fileSize = -1; wif.seekg(0, std::ios::end); fileSize = wif.tellg(); wif.seekg(0); if (fileSize > 0 && fileSize < bufferSize) { wchar_t *_buffer = new wchar_t[fileSize]; wif.read(_buffer, fileSize); //Do Something delete[] _buffer; } else { while (!wif.eof()) { wchar_t *_buffer = new wchar_t[bufferSize]; iretval = wif.read(_buffer, bufferSize).gcount(); if (bufferSize != iretval) { wchar_t * wctemp = new wchar_t[iretval]; wcsncpy(wctemp, _buffer, iretval); delete[] _buffer; _buffer = wctemp; } delete[] _buffer; } } wif.close(); } Aber das hat mir nichts gebracht.... LG Gateway
  11. Das am ende sind keine 0 Werte. Die letzten werte im Array sind 65021. Was mich stört ist das das Array größer ist als der eigentliche Inhalt. Ich hatte die Hoffnung, das ich das Array so resizen kann, das nur noch der relevante Inhalt drin ist. Muss ich das im nachhinein nochmal durchiterieren und händisch rausschmeißen?! So kann ich es nicht lassen, sonst steigt meine Routine aus, welche die Datenstruktur validiert, weil sie 65021 als invalid erachtet. LG Gateway
  12. Hi, danke für die schnelle Antwort. Vielleicht ein kurz ein paar Informationen warum ich das so gemacht habe. Warum lese ich nicht die ganze Datei ein? Die Zieldatei kann mehrere GB groß sein und wenn es fertig ist, wird die Funktion & deren "Analysefunktionen" in einem eigenen Thread ausgelagert. Es soll dann die Möglichkeit existieren den Vorgang abzubrechen wenn es zu lange dauert. Wenn ich aber ein komplettes Read mache, wüsste ich nicht wie ich das sauber abbrechen könnte. Zusätzlich kann es sein das das lesen der Datei selbstständig abgebrochen wird, da er abbrechen soll, wenn er bei der Analyse einen Strukturfehler findet. Deswegen iteriere ich durch. Am Ende wird in der Schleife dann noch eine Ausstiegbedingung reinkommen. Ein vector habe ich deswegen nicht genommen, da der eingelesene Inhalt in einer anderen Funktion aufbereitet wird (viele wchar_t character werden rausgelöscht). Soweit ich das verstanden habe, ist ein vector nicht dafür geeignet bzw. ist sehr langsam wenn es viele Inhalte gibt und diese auch öfters entfernt oder verändert werden. Wenn überhaupt dann würde ich evtl als alternative ne std::list hernehmen. Allerdings kann ich da nicht auf den Index zugreifen und müsste tatsächlich immer durchiterieren. Hm ich war der Meinung das char Unicode nicht handlen kann. Meines wissen ist der Wertebereich eines chars -127 bis 127. Auch ein unsinged char (255) kann ja nichtmal ansatzweise die UTF8 geschweige denn die UTF16 Tabelle abbilden. Da müsste ich dann ja immer mit zwei charactern arbeiten um ein Zeichen abzubilden. Das ist mir zuviel Aufwand. Da nehm ich lieber gleich den Typ der dafür vorgesehn ist. Ich habe mal ein Screenshot zusammengebastelt um das Problem genauer darzustellen. Ich kann mir das ehrlich gesagt nicht erklären. LG Gateway PS: @Klotzkopp: Zudem verlangen die ganzen tollen wc Funktionen immer Arrays. Da dachte ich, bleib ich lieber gleich bei Arrays, anstatt mir jedesmal vom Container ein Array zu holen.
  13. Hallo, zu erst einmal eine Frage vorweg. Ist der wifstream obsolet oder hoch kritisch? Ich finde total wenig wenn ich im Netz nach meiner Problematik suche. Meistens finde ich dann Beispiele mit ifstream... Ich will mit dem wifstream immer gebuffered den Inhalt einer Datei auslesen. Also nicht alles auf einmal sondern man soll der Funktion eine Buffersize mitgeben können. Das ganze sieht wie folgt aus: XCore* XCore::LoadFile(const std::wstring& filename,const int bufferSize = 4096) { XCore* result = 0; std::wifstream wif(filename); wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>)); int iretval = 0; while (!wif.eof()) { wchar_t *_buffer = new wchar_t[bufferSize]; iretval = wif.read(_buffer, bufferSize).gcount(); if (bufferSize != iretval) { wchar_t * wctemp = new wchar_t[iretval]; wcsncpy(wctemp, _buffer, iretval); delete[] _buffer; _buffer = wctemp; } delete[] _buffer; } wif.close(); return result; } Nicht wundern. Ich wollte die Funktion erstmal per Debugger testen, bevor ich mit dem Inhalt weiter verfahre. Und schon hatte ich einen Fehler gefunden. Mein Problem ist das gcount() immer falsche werte zurückliefert. Momentan läuft er immer in die Verzweigung rein die das Array resizen soll. Leider wird das Temporäre Array immer zu groß definiert. Sieht jemand jetzt schon einen gravierenden Fehler? Ansonsten würd ich mit weiteren Infos aufwarten. LG Gatway
  14. Danke für deine Hilfe. Ich werde mir das mal angewöhnen.
  15. Danke für deine Hilfe. Habs hinbekommen . Ich habe die rohe Zeigervariable in ExceptionBase rausgeschmissen (Wie du es mir immer sagst. Finger weg von rohen Zeigern ). Jetzt musste ich leider einen Standartkonstruktor für StackFrame erstellen (Parameterlos) und das wollte ich eigentlich nicht . Um das ganze zu lüften: struct StackFrame { private: int _line; std::string _assembly, _functionname, _filename; public: //Standartkonstruktor hinzugefügt StackFrame(); StackFrame(int lineNumber, std::string assembly, std::string functionName, std::string filename); int Line(); std::string Assembly(); std::string FunctionName(); std::string Filename(); }; StackFrame::StackFrame() { } StackFrame::StackFrame(int lineNumber, std::string assembly, std::string functionName, std::string filename) { _line = lineNumber; _assembly = assembly; _functionname = functionName; _filename = filename; unsigned pos = _filename.find_last_of("\\"); if (pos >= 0) _filename = _filename.substr(pos +1); } int StackFrame::Line() { return _line; } std::string StackFrame::Assembly() { return _assembly; } std::string StackFrame::FunctionName() { return _functionname; } std::string StackFrame::Filename() { return _filename; } Hier die ExceptionBase Klasse (Änderungen auskommentiert!): class ExceptionBase { private: long _errorcode, _oserrorcode; std::string _message; //StackFrame* _stackframe; StackFrame _stackframe; public: ExceptionBase(int errorcode, int oserrorcode, std::string _message, /*StackFrame* frame*/ StackFrame& frame); long ErrorCode(); long OsErrorCode(); ~ExceptionBase(); std::string Message(); //StackFrame* GetStackFrame(); StackFrame GetStackFrame(); }; ExceptionBase::ExceptionBase(int errorcode, int oserrorcode, std::string message, /*StackFrame* frame*/ StackFrame& frame) { _errorcode = errorcode; _oserrorcode = oserrorcode; _message = message; _stackframe = frame; } ExceptionBase::~ExceptionBase() { //if (_stackframe != 0) // delete _stackframe; } long ExceptionBase::ErrorCode() { return _errorcode; } long ExceptionBase::OsErrorCode() { return _oserrorcode; } std::string ExceptionBase::Message() { return _message; } //StackFrame* ExceptionBase::GetStackFrame() //{ // return _stackframe; //} StackFrame ExceptionBase::GetStackFrame() { return _stackframe; } LG & Danke Gateway
  16. Hi, danke für deine fixe Antwort. Aber das habe ich bereits ausprobiert, leider mit mäßigem Erfolg. Alle werte des ExceptionBase Objekts die keine Pointer sind, sind zugreifbar, alle anderen sind wieder <schlechtes ptr> und ich kassier nach dem Catch Block eine Fehlermeldung (ungültiger Speicherzugriff...). So wird die Exception geworfen: Und so sieht das Handling aus (beachte was in dem Contextmenü bei _stackframe steht): LG Gateway
  17. Hallo, du must einen Funktionszeiger "registrieren", damit du die Keyboard Messages erhältst. Hier findest du ein ganz gutes Beispiel. Vergiss aber nicht CallNextHookEx aufzurufen, ansonsten erhält nur noch deine Anwendung Keyboard Messages. LG Gateway
  18. Hallo, eventuell mach ich mir momentan zu viele Gedanken darüber, dennoch kann ich das jetzt so nicht stehen lassen. Ich schreibe mir momentan eine Basisklasse welche ich für das Exceptionhandling verwenden will. Diese Klasse beinhaltet ein paar Pointer variablen. Wenn ich jetzt den Fehler jetzt wie folgt werfe: throw ExceptionBase(.....); Dann habe ich folgendes Phänomen im Catch Block: Alle Felder sind richtig bis auf die Pointer Variablen. Deren Wert ist überall <schlechtes ptr> (steht wirklich so drin nicht mein grammatikalischer Fehler). Ich lehn mich jetzt mal weit aus dem Fenster und vermute mal das er eine Kopie des ExceptionBase Objekts macht und dabei Probleme mit den Pointern hat. (Wie C++ sich beim Exceptionhandling wirklich verhält, entzieht sich jedoch meinen Kenntnissen) Das Problem kann ich beheben indem ich das ExceptionBase Objekt beim Throw als Pointer erzeugen lasse: throw new ExceptionBase(.....); Ich hatte jetzt nur etwas schiss, das wenn ich das so überall mache und ich irgendwo mal vergesse im Catch Block den Pointer zu handlen, das ich dann Speicherleaks verursache. Also habe ich versucht einen Smart Pointer beim throw zu erzeugen: throw std::unique_ptr<ExceptionBase>(new ExceptionBase(0xF50,0, "Invalid datetime information.", frame)); Da meckert er noch nicht und alles scheint super. Allerdings meckert er beim Catch Block: catch (std::unique_ptr<ExceptionBase> ex) Dort bringt er folgenden fehler: Das liegt offensichtlich daran das der Destruktor von unique_ptr nicht öffentlich zugänglich ist. Wie würdet ihr das Lösen? Ich spiel jetzt gerade mit dem Gedanken mir ein eigenes "Smart Pointer" Template zu schreiben, das über einen öffentlichen Destruktor verfügt. LG Gateway
  19. Hallo, ich stelle mir momentan die Frage wie viele Verbindungen ein heutzutage guter Server verwalten kann. In diesem Kontext wollte ich den Site-Admin mal fragen ab wann es bei "fachinformatiker.de" eng wird? Wie viele simultane Verbindungen verkraftet der Webserver. Hat man das schon mal ausgelotet? Warum ich das Frage. Ich arbeite momentan an einem NAT Server und versuche momentan auszuloten, was ein einziger Server verkraftet bzw. wie viele Server ich theoretisch benötige. Lg Gateway
  20. Danke dir für die Information. TLS scheint ja eine Kombi aus RSA und AES zu sein. Das ganze klingt eigentlich genau nachdem was ich gesucht habe, passt aber leider nicht in mein aktuelles Klassenkonzept. Dafür müsste ich den SslStream nutzen und das krieg ich so nicht hin ohne die ganze Klassenhierarchie über den Haufen zu werfen. Eventuell hab ich etwas mit den Infos gegeizt. Daher kommt jetzt das ganze Packet. Ich schreibe aktuell eine Socket Klasse, welche um immens viele Funktionalitäten erweitert werden sollte. Der Grund? Da ich relativ viel mit Netzwerkprogrammierung mache, hab ich so ein paar Dinge kennengelernt, die mich jedes Mal fast in den Wahnsinn treiben. Beispielsweise den genauen Status der Verbindung (bei der Socket Klasse des .NET Frameworks ist der Status einer Verbindung faktisch nicht ohne eine Interaktion mit der gegenstelle zu ermitteln). Ich will zu jeder Zeit ohne jegliche Zusatzoperationen den aktuell gültigen Status der Verbindung abfragen können. Zudem möchte ich ebenfalls die Möglichkeit haben, gewisse Events abfangen zu können (Beispielsweise bei Verbindungsabbrüchen). Jetzt gibt es folgende Zustände: [Flags] public enum SocketConnectionState { Unknown = 0x0, NotInitialized = 0x1, AcceptingSync = 0x2, AcceptingAsync = 0x4, Listening = 0x8, Connecting = 0x10, ConnectingAsync = 0x20, Etablished = 0x40, Lost = 0x80, Disconnecting = 0x100, DisconnectingAsync = 0x200, Disconnected = 0x400, Sending = 0x800, SendingAsync = 0x1000, Receiving = 0x2000, ReceivingAsync = 0x4000, SendClosed = 0x8000, ReceiveClosed = 0x10000, Closed = 0x20000, SendingKeepAlivePackage = 0x40000, ReceivingKeepAlivePackage = 0x80000 }; Man hat die Möglichkeit dem Socket eine KeepAliveDefinition zu übergeben, in der man das Interval und auch das Datenpacket festlegen kann. Jetzt kam zusätzlich noch der Wunsch dazu, das man dem Socket direkt einen "Cryptography Layer" übergeben kann. Somit soll der Socket sich selbst um die korrekte Verschlüsselung/Entschlüsselung kümmern. Dafür verlangt die Socket Klasse jetzt eine Klasse die das Interface ICryptoLayer implementiert: public interface ICryptoLayer { bool IsHybrid { get; } bool CanChangeEncryptionMode { get; } SocketEncryptionDirection EncriptionDirection { get; } bool CanEncrypt { get; } bool CanDecrypt { get; } bool IsBlockchiffre { get; set; } int BlockSize { get; set; } HybridEncriptionState CryptoState { get; } byte[] Encrypt(byte[] input); bool TryEncrypt(byte[] input, out byte[] output); byte[] Decrypt(byte[] input); bool TryDecrypt(byte[] input, out byte[] output); bool ChangeCryptoMode(); bool Inheritable { get; set; } } Da prinzipiell jedes Verschlüsselungsverfahren unterstützt werden soll, gibt es aktuell drei Klassen die von dem Interface erben: --> SymmetricCryptoLayerCfg (Verlangt im Konstruktor einen Typen der von der Klasse SymmetricAlgorithm erbt) --> AsymmetricCryptoLayerCfg (Verlangt im Konstruktor einen Typen der von der Klasse AsymmetricAlgorithm erbt) --> HybridCryptoLayerCfg (Verlangt im Konstruktor zum einen eine SymmetricCryptoLayerCfg Instanz und eine AsymmetricCryptoLayerCfg Instanz). Beispielsweise kann ich jetzt bei der Verwendung von Hybriden Verfahren bequem über die Property CryptoLayer der Socket Klasse zwischen den einzelnen Techniken wechseln. Und auch um die Verschlüsselung muss ich mich nichtmehr kümmern. Wenn ich die Daten verschlüsselt übertragen möchte, muss ich lediglich dem Socket die entsprechende Verschlüsselungsschicht übergeben. Dann übergebe ich die Daten wie man das bei einem normalen Socketobjekt auch macht. Intern kümmert sich die Socketklasse selbst um die Verschlüsselung/Entschlüsselung. Die größte Hürde war definitiv die Kryptographie Schicht. Harmoniert aber jetzt endlich wunderbar . Danke @ all. Lg Gateway
  21. Sorry für Doppelpost, aber an dieser Stelle eine generelle Frage zu dem Asymmetrischen Verfahren RSA. Stimmt es das die zu verschlüsselnden Datenpackete kleiner sein müssen als die Schlüsselgröße?:beagolisc Ich bekomme hier die ganze Zeit Exceptions mit "Ungültiger Länge..". Nach der Logik von oben hab ich also angefangen größere Packete zu splitten (aktuelle Schlüsselgröße 2048). Alle Datenpackete sind nun kleiner als 2048. Jedoch erhalte ich bei der Verschlüsselung immer noch "Ungültige Länge". Ich hab das mal per Hand ausgelotet und er bringt die Meldung nichtmehr bei 200 Bytes. Eine Eigenschaft für die Maximal zulässige Packetgröße scheint es nicht im RSACryptoServiceProvider zu geben. Kann man das irgendwie berechnen? Ich muss sagen das ganze verliert hier momentan immens an Charme. Ich meine 200 Bytes sind ja quasi nichts. Reicht aktuell noch nicht einmal für die Authentifizierung. Ich habe testweise eine "große Datei eingelesen" (17KB). Daraus macht er momentan 87 Byte Arrays. (Kostet auch überhaupt keine Performance das ganze....) Was mir total wichtig wäre ist: Wie kann ich die Maximal erlaubte Packetgröße ermitteln? Lg Gateway
  22. Die meisten Erfahrungen sammelt man, indem man es selbst ausprobiert . Zudem bin der Meinung, das das Thema Kompatibilität häufig überschätzt wird . Ich finde ich die Cryptograhpy Klassen im .NET sind sehr schwer zu nutzen (nicht immer ganz klar was da wieder nicht passt). Ich hab gestern mal wieder den ganzen Tag damit verbracht den Fehler "Zeichenabstände sind ungültig und können nicht entfernt werden." zu beheben. Beheben ist eventuell eine leichte Übertreibung. Ich hab das Padding einfach deaktiviert....Und ja dafür schäme ich mich.... Lg Gateway
  23. Ich hab das jetzt nur so aus dem Text erschlossen. Wenn es heißt das der öffentliche Schlüssel nicht entschlüsseln kann muss er die Daten ja im Klartext erhalten. Naja egal. Ich hab mich kurzerhand für was hybrides entschieden. Für den Verbindungsaufbau mit dem Server verwende ich RSA. Der Client generiert einen Zufälligen String und (verschlüsselt diesen mit dem öffentlichen Schlüssel) und schickt diesen an den Server. Der entschlüsselt diesen dann und nutzen den String dann für die Nutzung einer Symmetrischen Verschlüsselung zwischen dem Client und Server. Mein Problem ist damit gelöst. Danke für den Hinweis.
  24. So nebenbei ist das aber nicht das höchste der Gefühle. Das heißt ja dann wenn ich beispielsweise Online-Banking mache, kann zwar niemand meine Authentifizierung Daten abgreifen, jedoch kann jeder sich meine Bewegungsdaten abgreifen, da diese ja dann unverschlüsselt vom Server zurückkommen. Da bleib ich dann doch lieber bei symmetrischen Verschlüsselungstechniken .

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...