Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Borg
Thema: Accessdatenbank Double auslesen
Am im Forum: Datentechnologien

Vielleicht wird in einem Währungsfeld einfach in der kleinsten Währungseinheit gespeichert?
Also 2,53€ als 253 Cent ?
Das wäre doch eine sehr einfache Erklärung deines Problems.

Thema: Dateizugriff feststellen?
Am im Forum: Rund um die Programmierung

MSDN Lib:

Zitat
There are several types of changes you can watch for in a directory or file. For example, you can watch for changes in Attributes, the LastWrite date and time, or the Size of files or directories. This is done by setting the NotifyFilter property to one of the NotifyFilters values. For more information on the type of changes you can watch, see NotifyFilters.
Zitat
NotifyFilters Enumeration
Specifies changes to watch for in a file or folder.
...
Members
Member name - Description
Attributes - The attributes of the file or folder.
CreationTime - The time the file or folder was created.
DirectoryName - The name of the directory.
FileName - The name of the file.
LastAccess - The date the file or folder was last opened.
LastWrite - The date the file or folder last had anything written to it.
Security - The security settings of the file or folder.
Size - The size of the file or folder.

Thema: 1 bestimmte Zeile aus Textfile lesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Es gibt nur vier Möglichkeiten, so ein Problem zu lösen.

  1. Du liest die Datei zeilenweise ein, bis du die gewünschte Zeile hast => einfach, ohne Caching wenig performant,
  2. du "taggst" die Zeilen, d.h. jede Zeile beginnt mit ihrer Länge und teilt dir damit mit, wie weit du den Offset erhöhen musst => gegenüber 1. nur lohnend, wenn die Zeilenlänge im Vergleich zur Anzahl sehr groß ist, außerdem wird aus der Text- dann eine Binärdatei, Performance nicht wesentlich besser als 1.,
  3. du stellst sicher, dass alle Zeilen gleich lang sind und kannst dann durch einfache Rechenoperationen den Beginn der Zeile errechnen => Datensätze müssen gleich lang sein, dann Zugriff wie auf ein Array möglich, schnell und einfach, oder
  4. du speicherst in einer extra Datei den Offset der einzelnen Zeilen (Index) => beim Lesen einer Zeile, wird erst deren Offset gelesen, dass die Zeile selbst, langsamer als 3., aber flexibler.
  5. Wie auch immer: erzeugst du dafür eine eigene Klasse, kannst du das alles kapseln und per Indexer Zugriff wie auf ein Array gewähren.

    Du solltest aber bei zufälligen Leseanforderungen an eine Datei diese mit FileOptions.RandomAccess öffnen. Das verhindert, dass das System sinnlos die Datei in den Cache lädt.

Thema: Programm mit System starten - ohne Autorun?
Am im Forum: Rund um die Programmierung

Der Registry-Zweig "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" ist der "goldene Weg". Diesen gibt es sowohl für die ganze Machine (HKLM\), als auch für jeden Benutzer (HKU\*\; HKCU\).

Thema: Uhrzeit einstellen unter Vista
Am im Forum: Rund um die Programmierung

Eventuell musst du mittels Codesicherheit extra Rechte einfordern, um die Zeit innerhalb .NET ändern zu dürfen.

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

@herbivore: Ich wollte eigentlich darauf hinaus, dass die obige Berechnung der (LaPlace-)Wahrscheinlichkeit keinen Sinn macht, wenn die gewählten Passwörter nicht gleichverteilt sind. Und da wohl Passwörter der Klasse "aaaaaa" häufiger vorkommen dürften als welche der Klasse "bu.Hö&", ist die Gleichverteilung eben nicht gewährleistet und damit die Berechnung der (LaPlace-)Wahrscheinlichkeit sinnlos.
Die Berechnung setzt einfach voraus, dass der gesamte Zeichenraum gleichverteilt benutzt wird. Aber solange ich dem Benutzer sein Passwort selbst wählen lasse, funktioniert das nicht.
Beispiel: Es soll ein zehnstelliges Passwort aus Klein- und Großbuchstaben sowie Zahlen, Umlaute und Sonderzeichen gewählt werden. Theoretisch habe ich ja dann einen Zeichenraum von 27+26+10+3+39 = 105 (nur auf der Tastatur abgebildete Zeichen gezählt) und damit einen Schlüsselraum von 105^10 ~ 1,63e18.
Praktisch hingegen werden über Alt Gr zu erreichend Sonderzeichen nicht vorkommen, selbst Shift scheint den meisten Benutzern unbekannt zu sein. Außer um den Namen ihrer Katze groß zu schreiben, was aber wohl kein Vorteil ist.
Dabei kommen dann höchstens Passwörter der Klasse "Muschi2003" für die in diesem Jahr gekaufte Katze heraus oder "Daniel2005" für das damals geborene Kind.
Untersuchungen (siehe beispielsweise http://www.heise.de/newsticker/meldung/73396) würden zeigen, dass 80% der Passwörter gerade mal 50% des Zeichenraums nutzen, also nichts mit Gleichverteilung.

Da aber kein Benutzer den verfügbaren Zeichenraum ausnutzt, sind alle Berechnungen, die diesen verwenden sinnlos, solange der Nutzer sein Passwort selbst wählen kann.

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Ich glaube mittlerweile, dass eine Skale allein nicht zum Erfolg führt.

Die Standardabweichung liefert ein gutes Zeichen dafür, wie stark die Zeichen konzentriert sind. Allerdings arbeitet sie bislang einfach auf dem UniCode-Zeichensatz, der nicht nach Ähnlichkeit bzw. Korelationen zwischen den Zeichen sortiert ist. So müssten in einem angepassten Zeichensatz "e", "n" und "s" direkt nebeneinander stehen, da sie die häufigsten Buchstaben eines deutschen Textes sind (bzw. im Zeichensatz müssten die Zeichen nach ihrer Häufigkeit in den Texten der entsprechenden Sprache sortiert sein).
Damit ließen sich deutlich bessere Resultate erzielen; man könnte - vermute ich - sogar Wörter erkennen.

Zweitens müsste man ein Wörterbuch benutzen, um die größten Teilstrings zu ermitteln, die in einem Wörterbuch stehen. Je weniger Zeichenfolgen in einem Wörterbuch stehen, desto besser ist das Passwort.

Und drittens sollte das Passwort eine Mustererkennung durchlaufen, um so etwas wie "ababab" zu erkennen. Dazu stelle ich mir vor, das Passwort als Punktmenge im durch Stelle X Zeichencode gebildeten Raum darzustellen und dann eine Fourier-Transformation durchzuführen, die diese Punktemenge abbildet. Je mehr Koeffizienten diese Funktion enthält, desto besser ist das Passwort.

Wie man das ganze dann in einen Wert gießt, bereit mir noch Kopfzerbrechen.

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Das Problem dabei ist halt nur, dass auch diese Berechnung der "Errat-Wahrscheinlichkeit" keinen Unterschied zwischen verschiedenen Passwörtern der gleichen Klasse macht. So wie beim Vorschlag von webstarg und herbivore weiter oben, wird ermittelt, wie viele unterschiedliche Passwörter es theroretisch gibt. In diesem Beispiel wird jetzt daraus die Wahrscheinlichkeit berechnet, mit der ein bestimmtes Passwort innerhalb seiner Lebenszeit erraten werden kann. Streng genommen gilt das aber nur dann, wenn das Passwort selbst eine zufällige Zeichenkombination aus dem Zeichenraum ist. Dann gilt natürlich immer: ein Passwort ist um so besser, je größer der Zeichenraum ist, je zufälliger die Zeichen kombiniert werden und je länger es ist. In die Berechnung der Wahrscheinlichkeit fließt jetzt halt noch die Wahrscheinlichkeit mit ein, das Passwort innerhalb seiner Lebenszeit zu erraten, wobei natürlich logisch ist: je öfter Passwörter gewechselt werden, desto unwahrscheinlicher wird es, dieses während der Verwendung zu erraten.

Daher halte ich diese Art der Berechnung nur für zufällig ermittelte Passwörter für sinnvoll.

Thema: Negative Zahlen in Rot darstellen
Am im Forum: GUI: Windows-Forms

Die Textfarbe ist keine Eigenschaft des Strings, sondern des Controls.
Soll heißen: selbst testen und Farbe anpassen.

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Das Thema hat mich nicht in Ruhe gelassen.
Dann fiel mir ein Mittel der Statistik ein, um die Streuweite einer Stichprobe zu ermitteln: die Standardabweichung. Da die Werte aber relativ hoch waren, habe ich deren natürlichen Logarithmus gebildet.

Damit erhalte ich folgende Implementierung:

private static double GetPasswordStrength2( string pwd )
{
   // leeres Passwort => nix mit stark
   if (String.IsNullOrEmpty( pwd ))
   { return 0; }
   // Zeichen in int wandeln und summieren
   double[] values = new double[ pwd.Length ];
   double sum = 0.0;
   for (int i = 0; i < pwd.Length; i++)
   {
      values[ i ] = (double)((int)pwd[ i ]);
      sum += values[ i ];
   }
   // Mittelwert berechnen
   double mittel = sum / pwd.Length;
   // Varianz berechnen
   double varianz = 0.0;
   for (int i = 0; i < values.Length; i++)
   {
      double intern = values[ i ] - mittel;
      varianz += intern * intern;
   }
   // nur gleiche Zeichen => dek. Log. der Länge
   if (varianz ≤ 0.0)
   {
      return Math.Log10( pwd.Length );
   }
   // Standardabweichung s berechnen und deren nat. Log. zurückgeben
   return Math.Log( Math.Sqrt( varianz / (pwd.Length - 1)) );
}
Und siehe da, die erhaltenen Werte korrelieren ziemlich gut (auf vier Nachkommastellen gerundet):
Borg    3,0982
Borg1234        3,3839
Borg was here.  3,4521
No Borg here anymore, even not a single 1.      3,4831
mycsharp        2,1169
mycsharp.de     2,9958
www.mycsharp.de 3,174
http://www.mycsharp.de  3,3116
Das ist nur ein absolut sinnfreier Teststring, der nur zeigen soll, was bei extrem langen Passwörtern passiert. 3,4792
hIug^H$&&%8_ihugü#      3,9354
aaaaaa  0,7782
argdip  1,8985

Da die Skale logarithmisch ist, bedeutet das, dass das Passwort "argdip" ungefähr dreimal besser als "aaaaaa" ist...

Thema: Überprüfen ob eine Datei ein Bild ist oder nicht.
Am im Forum: Grafik und Sound

Sehe ich genauso. Eine simple Trennung nach typischen Extensionen grenzt die Zahl der Exceptions schon mal deutlich ein...

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Damit bekommt man ja dennoch nur heraus, wie viel verschiedene Passwörter prinzipiell möglich sind, bei Verwendung der benutzten Blöcke.
Inwieweit hilft das jetzt bei der Bewertung eines konkreten Passworts?

Was ich damit meine: Mit dieser Art der Berechnung würde die Güte des Passworts "aa" 26^2 = 676 betragen. Das Passwort "aA" hätte die Güte 52^2 = 2704. Und dieses Passwort ist kaum besser als das andere.

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Das hilft einem doch aber nicht bei der Gütebeurteilung eines gegebenen Passworts.

Thema: Von leerer Klasse erben?
Am im Forum: Rund um die Programmierung

Zitat
das Interface "RunFromStart" implementiert haben.
Hier wird nur der Konstruktor benötigt, und keine "gemeinsame Funktionalität".
Das ist doch aber eine gemeinsame Funktionalität.

Thema: Aus mehreren Timestamps den neuesten finden.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Genau aus dem Grund sollte man auch immer ein Format wie "yyyy_mm_dd_hh_mm_ss" verwenden. Dann kann man einfach die Strings sortieren.
Merke: Datum-/Zeitstrings immer der Größe nach ordnen: Jahr-Monat-Tag-Stunde-Minute-Sekunde.

Thema: Ereignis für MaxLength
Am im Forum: GUI: Windows-Forms

Bitte keine MessageBox. Falls dir der Piepton wirklich nicht reicht, nutze einen ErrorProvider. Alles andere mindert die Benutzerfreundlichkeit und Ergonomie.

Thema: Hintergrundmusik?
Am im Forum: Grafik und Sound

Da fehlen eindeutig Grundlagen. Der Namespace lautet System.Media, der Klassenname SoundPlayer.
Damit muss man entweder die Klasse immer voll qualifizieren (System.Media.SoundPlayer) oder halt eine using-Direktive einbauen.

Thema: Von leerer Klasse erben?
Am im Forum: Rund um die Programmierung

Ich sehe keinen Sinn darin.
Wenn ich keinerlei gemeinsame Eigenschaften (Basisklasse) oder gemeinsame Funktionalität (Interface) habe, wozu sollte ich dann eine Klasse bzw. Interface definieren?

Thema: DrawImage verzerrt die Auflösung meines Bildes!?
Am im Forum: Grafik und Sound

Also ich fand die Idee von moeb1us sehr einleuchtend...

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Stimmt.

private static double GetPasswordSecurityIndex( string pwd )
{
   double mybase = 2.5;
   double pwdlog = Math.Log( pwd.Length + 1, mybase );
   double pwdlen = (double)pwd.Length;
   double value = 0.0;
   for (int i = 0; i < pwd.Length; i++)
      for (int j = i + 1; j < pwd.Length; j++)
         value += Math.Pow( Math.Abs((int)pwd[i]-(int)pwd[j]) / pwdlen, pwdlog );
   return (value > 0.0) ? Math.Log( pwd.Length * value ) : 0;
}

Jetzt habe ich leider keine Zeit zum Testen mehr. Mal heute abend schauen.

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Habe obigen Code mal ausprobiert und angepasst.
Die aktuelle Version:

private static double GetPasswordSecurityIndex( string pwd )
{
   double pwdlog = Math.Log( pwd.Length + 1);
   double pwdlen = (double)pwd.Length;
   double value = pwd.Length;
   for (int i = 0; i < pwd.Length; i++)
      for (int j = i + 1; j < pwd.Length; j++)
         value += Math.Pow( Math.Abs((int)pwd[i]-(int)pwd[j]) / pwdlen, pwdlog );
   return (value > 0.0) ? Math.Log( value ) : 0;
}

Hier mal ein paar Beispiele:

Borg    5,02650877675571
Borg1234        7,02423089434529
Borg was here.  7,95082622741682
No Borg here anymore, even not a single 1.      7,90570469080243
mycsharp        4,33975705524902
mycsharp.de     6,68671924145669
www.mycsharp.de 7,36601719119733
http://www.mycsharp.de  7,76037497025754
Das ist nur ein absolut sinnfreier Teststring, der nur zeigen soll, was bei extrem langen Passwörtern passiert. 6,97574345705376
hIug^H$&&%8_ihugü#      9,7687777314195

Ich finde, dass das schon relativ vielversprechend aussieht...

Thema: Passwort sicherheit
Am im Forum: Rund um die Programmierung

Du könntest auch das geometrische Mittel der gegenseitigen Differenzen aller UNICode-Werte des Strings bestimmen und als Maß nutzen. Dann brauchst du nichts bewerten oder ähnliches sondern ziehst als Kriterium bloß die Unterschiedlichkeit der Zeichen heran.

Im Code:

private double GetPasswordSecurityIndex( string password )
{
   double value = 1;
   for (int i = 0; i < password.Length; i++ )
      for (int j = i + 1; j < password.Length; j++ )
         value *= Math.Abs( (int)password[i] - (int)password[j]  ) + ( j - i );
   return password.Length * Math.( value, 1 / password.Length );
}

Vermutlich muss man diese Berechnung noch deutlich anpassen, allerdings liefert sie dann relativ schnell und eindeutig eine numerische Bewertung eines Passworts.
So empfinde ich die Nutzung eines SortedDictionary (@dr4g0n76: du hast versehentlich SortedList geschrieben), nur um doppelte Zeichen zu ermitteln, für arg umständlich. Desweiteren werden aufeinanderfolgende Zeichen nicht geprüft.
So sind die beiden Passwörter "abcdefgh" und "quejspod" gleichwertig, was sie jedoch mit Sicherheit nicht sind.

Thema: Dateiliste auslesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Falls du mehr Infos als nur die Namen brauchst: DirectoryInfo( myDirectory ).GetFiles().

Thema: Discardbuffer? RS232....kenn micht nicht mehr aus
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

1. Ersetze while-do durch do-while

// aus 
serialBTPort.Read(Buffer, 0, 1);
i = Convert.ToInt32(Buffer[0]);
while ((i & 192) != 0)
{
   serialBTPort.Read(Buffer, 0, 1);
   i = Convert.ToInt32(Buffer[0]);
}
// wird 
do
{
   serialBTPort.Read(Buffer, 0, 1);
   i = Buffer[0];
} while( (i & 192) != 0)

2. Ich würde die komplette Struktur ändern. Eine eigene Klasse beinhaltet den SerialPort und lässt sich von diesem per DataReceived benachrichtigen, sobald ein Byte eingetroffen ist (ReceivedBytesThreshold).
Ist diese ein Startbyte, wandert es in einen Puffer, der mit den folgenden drei Bytes aufgefüllt wird. Sobald der Puffer voll ist, löst die Klasse wiederum ein Event aus und gibt die Daten weiter.

Thema: Ein simples array in einem struct?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Sei dir dennoch bewusst, dass es zwischen den beiden Varianten einen Unterschied gibt.

Bei public single i1, i2, i3, i4; liegen vier Singles direkt hintereinander im Struct und benötigen damit 16 Bytes.
Bei public single[] i; wird nur die Referenz auf ein Array, also vier Bytes, abgelegt. Das Array selbst wird auf dem Heap angelegt (mittels new).

Um dieses Problem zu umgehen, könntest du dir für die zusammengehörenden Werte index und weight einen eigenen Typ als Struct definieren und diesen nutzen.

PS.: Verwendet man den Begriff Heap unter .NET eigentlich noch? Und wenn nicht: welcher wäre besser?

Thema: Microsoft bestätigt kritische Sicherheitslücke
Am im Forum: Szenenews

Zitat
In Vista wurde das alles und noch mehr verwendet.
Scheinbar jedoch nicht gründlich genug. Jedenfalls enthält Vista den Fehler auch.

Thema: Keyboardevent greift nicht oder lässt sich nicht auflösen
Am im Forum: GUI: Windows-Forms

@sarabande: Bevor du jetzt mit Windows Messages ankommst:
Lies doch bitte mal einen Thread durch, bevor du postest. megamacy möchte einen (mit Steuerung behafteten) Mausklick auf eine bestimmte Koordinate in einem DirectX-Spiel simulieren. Also vermutlich in irgendeinem Spiel cheaten.
Und das funktioniert nicht so wie gedacht.

EDIT: Und nachdem du wegen bunt und fett und groß (vermutlich) eine Verwarnung bekommen hast, arbeitest du jetzt mit Asterik und Gänsefüßchen und der gleichen Aggressivität.

Thema: Discardbuffer? RS232....kenn micht nicht mehr aus
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielleicht funktioniert es besser, wenn du SerialPort.BaseStream.ReadByte() verwendest?

Thema: saveFileDialog
Am im Forum: GUI: Windows-Forms

Zitat
Wie benutze ich den saveFileDialog
  1. Klickst du Ordner
  2. Tippst du Name
  3. Klickst du speichern
Thema: Zugriff auf die IrDa Schnittstelle
Am im Forum: Rund um die Programmierung

http://www.alanjmcf.me.uk/comms/infrared/Microsoft%20Windows%20IrDA%20programming.html