Autor Beitrag
coolace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Do 18.09.08 19:20 
Hy,

folgendes Problem ich habe eine Binärdatei die Passwörter speichert, die will ich natürlich
verschlüsseln. Da ich mich nicht damit auskenne hab ich bissel gegoogelt und das Teil
gefunden www.codoject.com/KB/...y/dotnetcryptog.aspx und mir die SourceFile
gedownloaded. Es steht ich soll dem einen Key und einen Vektor übergeben. Hab ich getan mit
"fsdalfsaljf" und "fsajlkfsajlö" aber woher weiß das ding wo meine zu verschlüsselnde Datei ist?
ausblenden C#-Quelltext
1:
Cryptography.Cryption Cryption = new Cryptography.Cryption("Your key","Your vector");					


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

namespace Cryptography
{
  /// <summary>
  /// Summary description for Cryption.
  /// </summary>
  public sealed class Cryption
  {
    private RijndaelManaged Algorithm;
    private MemoryStream memStream;
    private ICryptoTransform EncryptorDecryptor;
    private CryptoStream crStream;
    private StreamWriter strWriter;
    private StreamReader strReader;

    private string m_key;
    private string m_iv;

    private byte[] key;
    private byte[] iv;

    private string pwd_str;
    private byte[] pwd_byte;

    public Cryption(string key_val, string iv_val)
    {
      key = new byte[32];
      iv = new byte[32];

      int i;
      m_key = key_val;
      m_iv = iv_val;

      for(i=0;i<m_key.Length;i++)
      {
        key[i] = Convert.ToByte(m_key[i]);
      }
      for(i=0;i<m_iv.Length;i++)
      {
        iv[i] = Convert.ToByte(m_iv[i]);
      }

    }

    public string Encrypt(string s)
    {
      Algorithm = new RijndaelManaged();

      Algorithm.BlockSize = 256;
      Algorithm.KeySize = 256;

      memStream = new MemoryStream();

      EncryptorDecryptor = Algorithm.CreateEncryptor(key,iv);

      crStream = new CryptoStream(memStream, EncryptorDecryptor, CryptoStreamMode.Write);

      strWriter = new StreamWriter(crStream);

      strWriter.Write(s);

      strWriter.Flush();
      crStream.FlushFinalBlock();

      pwd_byte = new byte[memStream.Length];
      memStream.Position = 0;
      memStream.Read(pwd_byte,0,(int)pwd_byte.Length);

      pwd_str = new UnicodeEncoding().GetString(pwd_byte);

      return pwd_str;
    }

    public string Decrypt(string s)
    {
      Algorithm = new RijndaelManaged();

      Algorithm.BlockSize = 256;
      Algorithm.KeySize = 256;

      MemoryStream memStream = new MemoryStream(new UnicodeEncoding().GetBytes(s));

      ICryptoTransform EncryptorDecryptor = Algorithm.CreateDecryptor(key,iv);
      memStream.Position = 0;
      CryptoStream crStream = new CryptoStream(memStream,EncryptorDecryptor,CryptoStreamMode.Read);
      strReader = new StreamReader(crStream);

      return strReader.ReadToEnd();
    }
    
  }
}


Gruß

Coolace


Zuletzt bearbeitet von coolace am Sa 20.09.08 14:59, insgesamt 1-mal bearbeitet
Flitzs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Do 18.09.08 21:08 
Hey,

die Methoden der Klasse sind nur zum verschlüsseln / entschlüsseln eines String gedacht, d.h. den zu verschlüsselnden Text musst du der Methode Encrypt mitgeben welche dir dann den verschlüsselten Text zurückgibt, das umgekehrte bei der Methode Decrypt.

Zum schreiben / laden einer Datei empfiehlt sich die Klasse System.IO.File

mfg Flitzs
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Fr 19.09.08 13:03 
Hy,

vielen Dank für deine Hilfe, hab versucht was daraus zu basteln aber versteh nicht was ich falsch mache,
beim Öffnen erzeuge ichh eine Paramterisierte List mit den Passwortinfos und das Objekt Crypton.
ausblenden C#-Quelltext
1:
2:
  List<Pw> pwliste = new List<Pw>();
  Cryptography.Cryption Cryption = new Cryptography.Cryption("Crypto Key""Inicalization Vector");



ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
  FileStream fsp = new FileStream(@"E:\Webdatenbank\pw.dat",FileMode.Open);
                BinaryFormatter binFormatter = new BinaryFormatter();
                pwliste = (List<Pw>)binFormatter.Deserialize(fsp);
                fsp.Close();
                Entschlüsseln();
        
        
        public void Entschlüsseln()
        {
            foreach (Pw temppws in pwliste)
            {
                Cryption.Encrypt(temppws.Benutzername);
                Cryption.Encrypt(temppws.Erinnerungsfrage);
                Cryption.Encrypt(temppws.Masterpasswort);
                Cryption.Encrypt(temppws.Seitenpasswort);
                Cryption.Encrypt(temppws.Weburl);
            }
        }
    
    
    public void Verschlüsseln()
        {
            foreach (Pw temppwsv in pwliste)
            {
                Cryption.Encrypt(temppwsv.Benutzername);
                Cryption.Encrypt(temppwsv.Erinnerungsfrage);
                Cryption.Encrypt(temppwsv.Masterpasswort);
                Cryption.Encrypt(temppwsv.Seitenpasswort);
                Cryption.Encrypt(temppwsv.Weburl);
            }
        }
    
    
     //speichern der Passwörter
          Verschlüsseln();
          FileStream fss = new FileStream(@"E:\Webdatenbank\pw.dat",FileMode.Create);
          BinaryFormatter binFormatter = new BinaryFormatter();
          binFormatter.Serialize(fss, pwliste);
          fss.Close();


Es kommt keine Fehlermeldung aber wenn ich die Binärdatei öffne seh ich das Sie unverschlüsselt ist, was mache ich falsch?

Danke und Gruß

Coolace
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 19.09.08 14:11 
Die Methoden Encrpyt/Decrypt liefern die ver-/entschlüsselte Zeichenkette als Rückgabewert zurück (es wird nicht in-place modifiziert).

Wenn du aber den Text selber verändern willst, dann mußt du ihn selber wieder zurückschreiben:
ausblenden C#-Quelltext
1:
temppws.Benutzername = Cryption.Encrypt(temppws.Benutzername);					
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Fr 19.09.08 15:39 
Hy,

danke für deine Hilfe, das verschlüsseln klappt einwandfrei, aber das entschlüsseln funktioniert dafür
aber irgendwie weniger komm aber irgendwie nicht drauf woran das liegen kann.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
FileStream fsp = new FileStream(@"E:\Webdatenbank\pw.dat",FileMode.Open);
                BinaryFormatter binFormatter = new BinaryFormatter();
                pwliste = (List<Pw>)binFormatter.Deserialize(fsp);
                fsp.Close();
                Entschlüsseln(); 
        
       public void Verschlüsseln()
        {
            for (int i = 0; i < pwliste.Count; i++)
            {
                pwliste[i].Benutzername = Cryption.Encrypt(pwliste[i].Benutzername);
                pwliste[i].Erinnerungsfrage = Cryption.Encrypt(pwliste[i].Erinnerungsfrage);
                pwliste[i].Masterpasswort = Cryption.Encrypt(pwliste[i].Masterpasswort);
                pwliste[i].Seitenpasswort = Cryption.Encrypt(pwliste[i].Seitenpasswort);
                pwliste[i].Weburl = Cryption.Encrypt(pwliste[i].Weburl);
            }
        }

        public void Entschlüsseln()
        {
            for (int i = 0; i < pwliste.Count; i++)
            {
                pwliste[i].Benutzername = Cryption.Decrypt(pwliste[i].Benutzername);
                pwliste[i].Erinnerungsfrage = Cryption.Decrypt(pwliste[i].Erinnerungsfrage);
                pwliste[i].Masterpasswort = Cryption.Decrypt(pwliste[i].Masterpasswort);
                pwliste[i].Seitenpasswort = Cryption.Decrypt(pwliste[i].Seitenpasswort);
                pwliste[i].Weburl = Cryption.Decrypt(pwliste[i].Weburl);
            }
                
            
        }
    
    //speichern der Passwörter
          Verschlüsseln();
          FileStream fss = new FileStream(@"E:\Webdatenbank\pw.dat",FileMode.Create);
          BinaryFormatter binFormatter = new BinaryFormatter();
          binFormatter.Serialize(fss, pwliste);
          fss.Close();
          this.Close();


Gruß

Coolace
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Sa 20.09.08 14:58 
Hy,

vielen Dank für eure Hilfe, hab es mit der File.Encrypt gemacht. Das andere funktioniert nicht
so wie ich mir das vorstelle.

Gruß

Coolace
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Sa 20.09.08 15:07 
user profile iconcoolace hat folgendes geschrieben:
Hy,

vielen Dank für eure Hilfe, hab es mit der File.Encrypt gemacht. Das andere funktioniert nicht
so wie ich mir das vorstelle.

Gruß

Coolace

Du weißt aber schon, dass File.Encrypt AFAIK EFS verwendet und daher für deine Zwecke völlig ungeeignet ist? Es verhindert bloß, dass jemand z.B. den PC mit einer Bootdisk startet und die Datei ausliest, aber ein Auslesen der Datei bei gestartetem Rechner und angemeldetem Benutzer verhindert es in keinster Weise.

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Sa 20.09.08 19:42 
Das schon, aber zumindest passiert auch nichts mit den Daten wenn sich ein anderer User anmeldet da
das EFS-Zertifikat ja Usergebunden ist und ich mich erst tiefer in diese Verschlüsselung einarbeiten
muss, das was ich gefunden hab funzt nicht.

Danke und Gruß

Coolace