Autor Beitrag
goose
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Di 13.02.07 16:53 
Hallo,

Ich habe mein erstes kleines Programm in C# nun fast fertig.
Es hapert nur noch an folgendem:

Im Programm wird ein Password für das abrufen von einigen Daten von meiner Webseite gebraucht.
Damit der User das nicht jedesmal wieder eingeben muss dachte ich mir ich speichere den Usernamen und das Password in eine Binärdatei ( weil es da nicht zu lesen ist ).
Pustekuchen .. als ich die Datei mal mit Ultraedit angeschaut habe musste ich feststellen das man da ja alles drin lesen kann wenn man sich ein bischen Mühe gibt.

Zitat:
S T F 0 0 1 g o o s e


So sieht das aus. Kann ja jeder entziffern.
Wenn man in Ultraedit auf Hex umstellt kann man es übrigens auch lesen.

Gespeichert habe ich das so :

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (System.IO.File.Exists("data.dat"))
                System.IO.File.Delete("data.dat");

            System.IO.FileStream fs = new System.IO.FileStream("data.dat", System.IO.FileMode.Create, System.IO.FileAccess.Write);
            System.IO.BinaryWriter w = new System.IO.BinaryWriter(fs,System.Text.Encoding.UTF32);
             w.Write((String)tbCallsign.Text);
             w.Write((String)mtbPassword.Text);
            w.Close();
            fs.Close();
        }


Nun steht die Frage wie ich das besser machen kann ?

Das muß jetzt auch keine Wahnsinnig komplizierte Sache werden, nur das man das nicht gleich so offensichtlich lesen kann.

Könnt Ihr mir da mal helfen ?

Danke
Matthias
ambig
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 02.06.07 02:55 
hallo goose,

grundsätzlich ist es immer gefährlich, passwörter in eine datei zu schreiben.
in deinem fall kann man natürlich das passwort in der datei lesen, weil du es einfach als unicode string reinschreibst =)
System.Security.Cryptography enthält einige klassen zur verschlüsselung, die für dich interessant sein könnten.
bei solchen sicherheitsgeschichten sollte man auch immer dran denken, dass .net programme sehr leicht zu dekompilieren sich, und sich ein potenzieller angreifer einfach deinen code im .net reflector reinziehen könnte, umn dann zu erkennen, dass du das psw in der datei data.dat speicherst.
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Sa 02.06.07 06:16 
Hallo,

danke für die ANtwort, acu wenn die Frage schon ein weilchen her ist.
Wie würdest Du das denn machen ?

Matthias
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 02.06.07 10:54 
Hallo,

ich hatte unter Delphi folgende Routine verwendet:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
//  einheitliches Verfahren zum Verschlüsseln und Entschlüsseln
//  Muster siehe: Michael Ebner, Delphi 3, Datenbankprogrammierung Seite 365 Stufe 2
//  Achtung: der Schlüssel ändert sich für jedes Zeichen
procedure Umsetzen_codieren( var sBuffer: shortstring );
var ix1: integer;
begin
  for ix1 := 1 to Length(sBuffer)
  do sBuffer[ix1] := chr( ord(sBuffer[ix1]) xor ((ix1 mod 9)*3+5) );
end;

Du müsstest also einmal den eigentlich gewünschten String verschlüsseln und anzeigen lassen (per MessageBox oder WriteLine oder ...) und diese Verschlüsselung im Quelltext speichern. Dieser String ist nicht "offensichtlich" zu lesen; das Verfahren sollte für Deine Zwecke reichen.

Unter C# kannst Du natürlich nicht mit String arbeiten, weil der nicht verändert werden kann; aber eine einfache Änderung in char[] sollte genügen.

Gruß Jürgen

PS. Dieses Verfahren nutzt für Ver- und Entschlüsselung die gleiche Routine und ist deshalb für solche einfache Verwendung sehr nützlich.
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Sa 02.06.07 16:54 
Hallo,

zu Zeit versuche ich diese Zeile in C# umzustellen, aber da sind einige Sachen die gibts nicht in C# : chr, ord mod, xor ... ???
Wie mach ich das in C# ??

ausblenden C#-Quelltext
1:
chr( ord(sBuffer[ix1]) xor ((ix1 mod 9)*3+5) );					


Wie muss das in C# aussehen ?

Matthias
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 02.06.07 17:39 
Hallo,

chr und ord sind die einfachen Konvertierungen char <=> int.
mod ist (wie in der Mathematik) der Modulo-Operator, in C# geschrieben '%'.
xor ist der "bitweise exklusive or-Operator", in C# geschrieben '^'.

Also sollte sich folgende Anweisung ergeben (nicht getestet):
ausblenden C#-Quelltext
1:
sBuffer[x1] = Convert.ToChar( ((int)sBuffer[x1]) ^ ((ix1 % 9)*3 + 5) );					

Jürgen
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: So 03.06.07 06:36 
Hallo,

danke Dir, das funktionert!
Man muß allerdings für sBuffer[ix] einen Char nehmen da man einem String[x] nix zuweisen kann.

Danke
Matthias
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 03.06.07 15:43 
Prima, dass es klappt!
user profile icongoose hat folgendes geschrieben:
Man muß allerdings für sBuffer[ix] einen Char nehmen da man einem String[x] nix zuweisen kann.

Ich hatte bereits in meiner ersten Antwort geschrieben:
user profile iconJüTho hat folgendes geschrieben:
Unter C# kannst Du natürlich nicht mit String arbeiten, weil der nicht verändert werden kann; aber eine einfache Änderung in char[] sollte genügen.

Jürgen
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: So 03.06.07 16:15 
Hallo,

ja genau.
Ich hielt es nur für erwähnenswert.

Danke nochmals
Matthias