Autor |
Beitrag |
coolace
      
Beiträge: 141
|
Verfasst: 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?
C#-Quelltext 1:
| Cryptography.Cryption Cryption = new Cryptography.Cryption("Your key","Your vector"); |
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 { 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
      
Beiträge: 123
Erhaltene Danke: 7
Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
|
Verfasst: 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 
      
Beiträge: 141
|
Verfasst: 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.
C#-Quelltext 1: 2:
| List<Pw> pwliste = new List<Pw>(); Cryptography.Cryption Cryption = new Cryptography.Cryption("Crypto Key", "Inicalization Vector"); |
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); } } 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
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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:
C#-Quelltext 1:
| temppws.Benutzername = Cryption.Encrypt(temppws.Benutzername); |
|
|
coolace 
      
Beiträge: 141
|
Verfasst: 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.
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); } } 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 
      
Beiträge: 141
|
Verfasst: 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
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Sa 20.09.08 15:07
coolace 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 
      
Beiträge: 141
|
Verfasst: 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
|
|
|