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: Salt-Wert
Am im Forum: Rund um die Programmierung

Leider auch falsch.

http://www.orange.co.jp/~masaki/rc572/fratee.php
Laut dieser Liste kann ein handelsüblicher Athlon 64 x2 4600+ unter Win XP Pro ungefähr 20Mio Schlüssel pro Sekunde berechnen.

20Mio Schlüssel sind zwischen 2^24 und 2^25 Schlüssel. Also braucht der Rechner nur noch 2^36 bis 2^35 Sekunden.
2^36 Sekunden sind knapp 2180 Jahre FÜR EINEN EINZIGEN RECHNER.
Übliche Systeme haben aber heute locker mal 2000 CPUs.
Ergo nur noch knapp über 1 Jahr, wenn sie den kompletten Schlüsselraum absuchen müssten. Bei zufälliger Verteilung der Schlüssel müssten sie aber auch durchschnittlich nur den halben Schlüsselraum absuchen.
Desweiteren sind dann auf einmal ALLE Passwörter dieser Länge mit diesem Hash-Verfahren kompromittiert (mit anderen Worten: du brauchst die ganze Rechnerei nur einmal durchführen und nutzt dann ne Tabelle).

http://www.metaner.de/1pw/brute-force.html
Hier haben sie mit den Werten vom obigen Link einige Berechnungen zur nötigen Dauer bei verschiedenen Passwörtern angestellt.
Bei unserem Beispiel beläuft sich die Dauer auf 882.73 Jahre für EINEN Rechner. Nimm einfach mal nen Superrechner mit 10000 Prozessoren oder nen Cluster mit 1000 Rechnern und du siehst, das dieses Problem sehr wohl besteht.

Verfügt man jetzt durch Würmer und Trojaner über ein Botnet mit ca. 200.000 Rechnern, kann man nicht nur massig Kohle durch Spam verdienen, sondern auch bezahlte dDoS-Attacken fahren (oder Schutzgeld erpressen) und so ganz nebenbei noch ein paar Passörter berechnen.

http://www.distributed.net/des/
Schau dir mal den DES-III Wettbewerb an.
Und die Diagramme der Auswertungen.
http://n0cgi.distributed.net/statistics/des3/
Du erkennst dort, das zum Ende des Wettbewerbs knapp 250 Milliarden Schlüssel pro Sekunde generiert wurden. Damit wurden knapp 30% des 56-bittigen Schlüsselraums innerhalb von nicht mal zwei Tagen abgegrast.
Und das was Januar 1999, lange vor dem "GigaHertz-Wettrennen".

Thema: Salt-Wert
Am im Forum: Rund um die Programmierung

Quallo sprach aber auch nicht von Anmeldungen über den Server. Diesem Problem kann man mit Zählen der Anmeldeversuche und Sperre nach mehreren fehlgeschlagenen durchaus entgegentreten (auch wenn sich das schon wieder für einen DoS Angriff ausnutzen lässt).

Quallo meinte hingegen, dass selbst wenn die Datei mit den Hashes geklaut würde, hat er nicht viel zu befürchten. Und das stimmt definitiv nicht.

Thema: Salt-Wert
Am im Forum: Rund um die Programmierung

@Quallo:
Da muss ich dir leider widersprechen.
Als erstes rechnen wir deine richtig angegebenen 62^10 Passwörter mal in Bits um:


62^10 = 2^x
dann beide Seiten logarithmieren
ln (62^10) = ln (2^x)
Logarithmengesetze
10 * ln 62 = x * ln 2
noch nach x umstellen
x = 10 * ln 62 / ln 2
Das ganze in nen Taschenrechner tippen und siehe da:
x = 59,54
Was folgt daraus? Deine Passwörter haben eine Länge von 60 Bit.
Das dürfte für den Rechner zu Hause ausreichen.
CIA, KGB, NSA, BND oder auch nur die RenderFarm von Dreamworks Pictures oder Pixar kommen da nur ins Schmunzeln.

Thema: Stop bei Input box!
Am im Forum: GUI: Windows-Forms

Poste mal InputBoxDialog.ShowDialog().

Thema: Programm zur Pizzabestellung
Am im Forum: Rund um die Programmierung

Wegen der schlechten Belüftung der Hörgänge.

Dies kann zu Temeraturunterschieden (daraus resultierend Druckunterschiede) in den Ohren führen.
Diese verursachen kaum spürbare Gleichgewichtsstörungen, die langfristig zu einem Gefühl des Unwohlseins führen.
Desweiteren wird der Gehörgang feucht, so dass es in Einzelfällen sogar zu einer Entzündung kommen kann.

Die Auswirkungen elektromagnetischer Felder so nahe am Hirn sind auch noch nicht ausreichend untersucht.

Andere mögliche Gründe (vielleicht etwas abwegiger) wären:

  • man hört weniger von der Umgebung,
  • man kann die Musik nicht so gut überhören und
  • die Dinger nerven auf Dauer einfach.

Thema: Programm zur Pizzabestellung
Am im Forum: Rund um die Programmierung

Eigentlich wollte ich mich hier ja nicht äußern.
Als ich aber gelesen habe, dass du seit Montag (!) an diesem Problem sitzt, fallen mir nur diese Tips ein:

  1. Geh Lebensmittel und Getränke kaufen. Keinen Alkohol
  2. Geh in einen Buchladen (alternativ Bibliothek)
  3. Kauf (bzw. leih) dir ein Buch. Beispielsweise
    http://www.amazon.de/gp/product/3860635514/302-3707928-3392844?v=glance&n=299956
    http://www.amazon.de/gp/product/382732324X/302-3707928-3392844?v=glance&n=299956
    http://www.amazon.de/gp/product/3826630378/302-3707928-3392844?v=glance&n=299956
  4. Geh nach Hause.
  5. Ruf deine Freundin an und sage ihr, dass du die nächsten Tage leider überhaupt keine Zeit hast.
  6. Schliess dich in deinem Zimmer ein.
  7. Wirf den Rechner an, mach IRC, IM und Fernseher aus, höchstens leise Musik (Ambient, nicht mit Kopfhörer)
  8. Starte deine Entwicklungsumgebung.
  9. Lies jetzt im Buch und probiere das ganze am Rechner.
  10. Wiederhole Schritt 9 für zwei bis vier Stunden.
  11. Mach Pause, geh aufs Klo, schüttel die Muskeln aus, trink etwas, iss eine Kleinigkeit
  12. Wenn es wieder hell wird, geh ins Bett. Ansonsten gehe zu Schritt 9
  13. Wenn du noch nicht weisst, wie du dein Programm schreiben sollst => Gehe zu Schritt 9
  14. schreibe jetzt dein Programm
  15. Präsentiere es stolz in der Schule und bei mycsharp.de
  16. Freu dich, du bist jetzt Anfänger und kein Noob mehr.

Thema: was kann alles in ein object[] gespeichert werden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wer lesen kann, ist klar im Vorteil:

Zitat
.NET Framework Class Library
DataColumnCollection.Add Method (String)

Creates and adds a DataColumn object that has the specified name to the DataColumnCollection.

/// ...

Syntax
C#
public DataColumn Add ( string columnName )

/// ...


Remarks
By default, the DataType for the new column is string.

Ergo:


tbl.Columns.Add("id", typeof( WhatKindOfTypeYourIDShallHave ) );
tbl.Columns.Add("param", typeof( System.Collections.Specialized.NameValueCollection ) );

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Ok, kam zu spät.

Freut mich trotzdem, dass es jetzt hinhaut.
Dir auch schönes WE.

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Oder alternativ so:


foreach( Control LöschMich in this.flowLayoutPanelLabels.Controls)
{
      LöschMich.Dispose();
}
this.flowLayoutPanelLabels.Controls.Clear();

Sollte prinzipiell keinen Unterschied machen, ausser dass diese Version möglicherweise etwas schneller ist.

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Habe noch mal in der MSDN nachgelesen. Das Verhalten, dass du beschreibst trifft auf Controls.Remove() zu.
Bei Clear() steht:

Zitat
Calling the Clear method does not remove control handles from memory. You must explicitly call the Dispose method to avoid memory leaks.
Daher gehe ich davon aus, dass das auch auf Remove() und RemoveAt() zutrifft.

Somit würde ich mal diese Schleife probieren:


while (this.flowLayoutPanelLabels.Controls.Count > 0)
{
      this.flowLayoutPanelLabels.Controls[0].Dispose();
      this.flowLayoutPanelLabels.Controls.RemoveAt( 0 );
}

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Eben das bezwifele ich ja.

Controls speichert Referenzen auf Objekte vom Typ Control.
Controls[n] liefert dir jetzt die Referenz auf ein Control.
Controls[n].Dispose() würde also die Dispose()-Methode des referenzierten Controls aufrufen, jedoch nichts an der Speicherung der Referenz in Controls ändern.

Hast du dieses Verhalten mal untersucht oder liege ich jetzt falsch?

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Hast du die Schleife mal debuggt?
Ich glaube nämlich nicht, dass durch Controls[n].Dispose() auch das Control aus der Collection gelöscht wird.
Da du aber ButtonCount dekrementierst, würdest du in diesem Fall nicht alle Controls erreichen.
Ansonsten alles ohne ButtonCount und am Ende einfach Controls.Clear()

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Stimmt, mein Fehler.
Schon mal mit einem simplen
this.flowLayoutPanelLabels.Controls.Dispose() probiert?

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Eigentlich sollte das schon reichen. Auch wenn du die for-Schleife durch eine foreach-Schleife ersetzen kannst.

Wann wird denn die "Dispose-Schleife" aufgerufen?
Ist sichergestellt, dass sie vor dem Konvertieren aufgerufen wird?

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Ok, dann habe ich das nur falsch verstanden.

Dein Code an sich funktioniert auf jeden Fall. Hat bei mir ganz brav ein Verzeichnis mit Bildern konvertiert.

Daher kann es nur an dem Button liegen. Eventuell reicht schon ein Button.Dispose?

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

???
Deine Antwort ist mir jetzt ehrlich gesagt etwas rätselhaft.
Was hat denn der Pfad mit der Berechnung zu tun?

Thema: Bitmap laden und unter gleichem pfad speichern?
Am im Forum: Grafik und Sound

Das Problem ist mir auch etwas rätselhaft.
Jedoch habe ich bim Durchsehen deines Codes folgendes gefunden:


//calculate new width
int newWidth = originalWidth / (originalHeight / 150);
Diese doppelte Division ist ... zumindest ungünstig.

Besser ist folgendes:


//calculate new width
int newWidth = (originalWidth * 150 ) / originalHeight;

Thema: [gelöst] Seitenwechsel beim Drucken
Am im Forum: Rund um die Programmierung

Hi Zocker,

freut mich zu hören, dass du es jetzt geschafft hast.

Thema: Webbrowser Files mit Registrierten Endungen
Am im Forum: GUI: Windows-Forms

Aber das Webbrowser Control ist doch extra dafür da, um auch den Inhalt der Dateien (sei es nun HTML oder XML) zu analysieren.

Leg in deiner Form doch einfach eine TextBox über den Webbrowser.
Dann machst du einfach den Webbrowser sichtbar und versteckst die TextBox, wenn du die Datei analysiert haben willst.
Willst du die Datei nur anzeigen, versteckst du den Webbrowser und zeigst die TextBox an.

Thema: Bild Speichern -> "The Path is not of a legal form."
Am im Forum: Grafik und Sound

Poste doch mal den Inhalt von cLB_Bilder.Text.

Thema: Internet Verbindungs Dauer
Am im Forum: Netzwerktechnologien

Windows speichert diese Informationen offensichtlich (werden ja bei Status von Netzwerkverbindung angezeigt).
Aber auch bei microsoft.com konnte ich nicht herausfinden, wo/wie die Zeit gespeichert wird.

Daher kann man sich mit der DHCP Lease Received Zeit (zu der die IP-Adresse zugewiesen wurde) behelfen.

Leider gibt das Framework in System.Net.NetworkInformation nur die noch verbleibende Lease-Zeit an.

Daher würde ich die Informationen mit ipconfig ermitteln lassen und dessen Ausgabe dann parsen.


        static void Main(string[] args)
        {
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "ipconfig";
            proc.StartInfo.Arguments = "/all";
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            string output = proc.StandardOutput.ReadToEnd();
            proc.WaitForExit(5000);
            if (proc.HasExited)
            {
                Console.WriteLine(output);
            }
            else
            {
                Console.WriteLine("ERROR");
            }
            Console.ReadLine();
        }

Thema: Frage zur Visual C# 2005 IDE
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

In diesem Fall packe ich das gesamte Verzeichnis in ein Archiv, verschiebe das versehen mit zusätzlichen Infos und Kommentaren (Eigenschaften / Dateiinfo) in ein extra dafür vorgesehenes Verzeichnis.

Anschliessend kann ich mit dem Projekt tun und lassen was ich will.
Das ganze nennt man dann Backup.

Thema: NotifyIcon.Text (max Länge) + ShowBalloonTip (Anzeigedauer)
Am im Forum: GUI: Windows-Forms

Zu 1.:

Dies ist eine Beschränkung des .NET Frameworks. Mir ist nicht bekannt, wie man diese umgehen kann.
Die einzige Möglichkeit, die ich sehe, ist, dafür das Windows-API zu verwenden, das diese Einschränkung nicht kennt. Dort sind sogar mehrzeilige NotifyIcon-Texte problemlos möglich.

Zu 2.:

Das Verhalten ist an sich sinnvoll. Vermutlich kann man die Zeitspannen nur in der Registry ändern, jedoch scheint das nicht dokumentiert zu sein.

Thema: ActiveX Objekt killen (im wahrsten Sinne des Wortes)
Am im Forum: Rund um die Programmierung

Wie wäre es damit:

Du nutzt ganz normal das Control. Wenn du dann feststellst, dass es nicht mehr reagiert (also wahrscheinlich das Dialogfenster geöffnet hat), suchst du das Fenster anhand seines Titels und sendest ihm die Nachricht für Fenster schliessen.

Alles was du dafür brauchst, ist die Fenster-Klasse und der Titel.
Dies kannst du alles mit Spy++ herausfinden.
(Wenn das ActiveX-Fenster offen ist Spy++ starten, dann im Menü Spy / Find Window..., das Zielkreuz auf die Titelleiste des ActiveX-Fensters ziehen und loslassen, bei Class steht dann die Fensterklasse, bei Caption der Name)

Dann nur noch:


public const int WM_SYSCOMMAND  = 0x0112;  // Code für System Kommando
public const int SC_CLOSE = 0xF060;               // Code für Fenster schliessen

[DllImport("user32.dll")]
public static extern int FindWindow(
     string lpClassName,  // Fensterklasse
     string lpWindowName  // Fenstername
);

[DllImport("user32.dll")]
public static extern int SendMessage(
     int hWnd,      // Fensterhandle
     uint Msg,     // Nachricht
     int wParam,  // erster Parameter
     int lParam   // zweiter Parameter
);

public void KillActiveXWindow()
{
     // Fenster suchen
     int iHandle = FindWindow( "Name der Fensterklasse" , "Name des Fensters" );
     // nachricht für Fenster schliessen senden
     SendMessage( iHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
 }

Damit sollte das Fenster dann zu sein. Wenn das nicht funktioniert, kannst du auch noch einen Mausklick auf den Button simulieren.

Thema: bei foreach auf referenz zugreifen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Als kleiner semantischer Zusatz noch folgendes:


typeX[] bla = ...;
foreach( typeX i in bla )
{
     DoSomethingUsefull( i );
}

Da in einer Collection beliebige Objekte gespeichert sein können, benötigt der Compiler Typinformationen. Daher muss man i innerhalb des foreach-Kopfes als typeX deklarieren.
Damit ist i aber eine lokale Variable innerhalb der foreach-Schleife.

Das Zuweisen von Werttypen (struct) an i würde also nur die lokale Variable für den aktuellen Schleifendurchlauf (beim nächsten erhält sie ja einen neuen Wert) verändern.

Das Zuweisen von Referenztypen (class) an i würde eine Referenz auf das eigentliche Objekt speichern. Wird dieses nicht anderweitig referenziert, wird es vom Garbage Collector am Ende des Gültigkeitsbereichs (scope) von i (also am Ende eines Schleifendurchlaufs) abgeräumt.

Daher KANN man gar nichts zuweisen, was über die Schleife hinaus Bestand haben soll.

Thema: bei foreach auf referenz zugreifen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das ist aber nicht PHP sondern C#.
Und norman_timo hat die Funktionsweise von foreach genau richtig beschrieben. Auch wenn es theoretisch möglich wäre, in einem nicht dynamischen Array die Elemente während der Iteration zu ändern, würde das die Allgemeingültigkeit von foreach für alle Collections (IEnumerator) einschränken.

Sicherlich hast du Recht, wenn du schreibst, dass foreach für ein Arry die Indize inkrementiert und durchläuft. Das ist jedoch eine spezifische Implementation der IEnumerator Schnittstelle für ein Array. Und diese nicht zu kennen (müssen), ist eine der Grundlagen der OOP (Kapselung).

Ausserdem kann man bei


node[] nodes = new node[ anzahl ];
for( int i=0; i < nodes.Length; i++ )
{  nodes[i] = getNext();  }
wohl wahrlich kaum von kompliziert sprechen.
Eher davon, dass dein Klassendesign wahrscheinlich der Verbesserung bedarf.

Thema: [gelöst] Seitenwechsel beim Drucken
Am im Forum: Rund um die Programmierung

Schau dir das Beispiel mal an.

Dort wird eine lokale Variable (count) benutzt, um zu zählen, wie viele Zeilen auf diese Seite ausgegeben werden.


int count = 0;
/// ...
while ( count < linesPerPage )
   {
       // hier eine Zeile drucken
       count++;
   }

Im Beispiel wird der Text ja aus einer Datei in den string line gelesen.
Daher am Ende:


// If more lines exist, print another page.
if (line != null) 
   ev.HasMorePages = true;
else 
   ev.HasMorePages = false;

Du müsstest dann in einer Instanzvariable vermerken, bis wohin du bereits gedruckt hast.


public class ...
{
    private int NextLineToBePrinted = 0;
    private string[] LinesToPrint;
    ...
    private void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
         // Zeilenzahl wie im Beispiel angegeben berechnen
         //
         while((count < linesPerPage) && (NextLineToBePrinted < LinesToPrint.Length))
         {
            // hier eine Zeile drucken
            ev.Graphics.DrawString( LinesToPrint[NextLineToBePrinted], ... );
            count++;
            NextLineToBePrinted++;
         }
         /// ...
         if (NextLineToBePrinted < LinesToPrint.Length)
             ev.HasMorePages = true;
         else 
             ev.HasMorePages = false;
    }
}

Thema: [gelöst] Seitenwechsel beim Drucken
Am im Forum: Rund um die Programmierung

Du darfst einfach nur soweit drucken, bis ein Seitenwechsel erfolgen soll.
Dann setzt du HasMorePages auf true und kehrst aus der Methode zurück.

Anschliessend wird das Event wieder aufgerufen und du kannst dort weitermachen, wo du aufgehört hast.

Sehr ausführlich und nahezu selbsterklärend ist das Beispiel in der MSDN für VS 2005 zu PrintDocument.PrintPage Event.

Wenn du diese nicht hast, siehe online unter http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfsystemdrawingprintingprintdocumentclassprintpagetopic.asp

Thema: Genauer Rechnen
Am im Forum: Rund um die Programmierung

Hi Lector,

  1. Du solltest grundsätzlich etwas Mathematik benutzen, um die optimale Formel zu finden.
  2. So ist es IMMER empfehlenswert alle Divisionen so weit wie möglich zu unterbinden, da diese bei Integers (im Gegensatz zu den anderen drei Grundrechenarten) nicht unbedingt verlustfrei ablaufen.
  3. Solange wie möglich mit Integers rechnen. Durch eine Konvertierung in double gewinnt man SO GUT WIE KEINE Genauigkeit (bzw. kommt auf die Zahlen an, je nach dem wie gut sich diese binär darstellen lassen).
  4. statt dem unübersichtlichen Typecast (double)2 könntest du auch einfach 2.0 schreiben.


Jetzt aber zum Umformen:

   -(Height / 2 - label.Height / 2 - label.Top)
= (label.Height + 2 * label.Top - Height) / 2

   (Height / 2 - label.Width / 2)
= (Height - label.Width) / 2

Bei der Division der beiden kürzt sich das /2 weg und du hast das ganze auf eine Division reduziert.
Analog gehen wir bei der zweiten Variable vor.

Somit erhalten wir folgenden Code:

double sin, cos;
sin = (label.Height + 2 * label.Top - Height) / (Height - label.Width);
cos = (label.Width + 2 * label.Left - Width) / (Width - label.Width);

Ansonsten fiel mir auf, dass du bei sin label.Width benutzt, obwohl es die ganze Zeit nur um y-Koordinaten geht (Sinus halt).
Ich vermute mal, dass dort eher label.Height hin muss.

Ich hoffe, das bringt dir die benötigte Genauigkeit.

P.S. Mir ist gerade aufgefallen, dass du erwartest, dass Null rauskommt. Dies wird immer dann zutreffen, wenn das Label auf dem Form zentriert ist. Daher verstehe ich den Sinn dahinter nicht ganz...

P.P.S. Nachdem ich das ganze noch mal mit deinen Werten durchgerechnet habe, glaube ich, deinen Fehler erkannt zu haben. Mit einem 15 Pixel hohen Control auf einer 200 Pixel hohen Form, müsste dieses bei 92.5 Pixel beginnen, um genau zentriert zu sein. Dies ist logischerweise nicht möglich, daher wird auf 93 Pixel aufgerundet. Allein dadurch KANN nicht mehr Null herauskommen. Analog für die x-Achse.
Daher glaube ich mittlerweile, dass dein gesamter Algorithmus dringend der Überarbeitung bedarf.