Autor |
Beitrag |
Unique C
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 09.04.12 16:43
Hey,
ich habe folgendes Problem:
Ich starte das Programm, wähle eine Datei aus, wähle den Speicherort und das Passwort. Doch dann kommt immer wieder eine Fehlermeldung:
System.UnauthorizedAccessException wurde nicht behandelt.
Der Zugriff auf den Pfad "C:\Users\DeLuXe\Desktop" wurde verweigert.
Was ist das denn? Ich komme einfach nicht weiter  vllt. könnt ihr mir helfen
Hauptform.Code:
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:
| namespace CryptPower { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
string InputKey = string.Empty;
private void btn_Start_Click(object sender, EventArgs e) { Passwort form2 = new Passwort(this); form2.ShowDialog();
if (Rbtn_Encrypt.Checked == true) { Crypter.EncryptData(textBox1.Text, textBox2.Text, InputKey); }
else if (Rbtn_Decrypt.Checked == true) { Crypter.DecryptData(textBox1.Text, textBox2.Text, InputKey); }
else { MessageBox.Show("Ein Fehler ist aufgetreten! Das Programm wird beendet!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } }
private void btn_Search1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = @"C:\"; ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; ofd.FilterIndex = 2; ofd.RestoreDirectory = true;
if (ofd.ShowDialog() == DialogResult.OK) { textBox1.Text = ofd.FileName; }
if (textBox1.Text != "" && textBox2.Text != "") { btn_Start.Enabled = true; } }
private void btn_Search2_Click(object sender, EventArgs e) { FolderBrowserDialog objDialog = new FolderBrowserDialog(); objDialog.Description = "Speicherort"; objDialog.SelectedPath = @"C:\"; DialogResult objResult = objDialog.ShowDialog(this); if (objResult == DialogResult.OK) { textBox2.Text = objDialog.SelectedPath; }
if (textBox1.Text != "" && textBox2.Text != "") { btn_Start.Enabled = true; } } } } |
Crypter.Code:
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:
| namespace CryptPower { class Crypter { public static void EncryptData(string sFileIn, string sFileOut, string key) { FileStream fsIn = new FileStream(sFileIn, FileMode.Open, FileAccess.Read); FileStream fsOut = new FileStream(sFileOut, FileMode.Create, FileAccess.Write);
AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); aes.Key = ASCIIEncoding.ASCII.GetBytes(key); aes.IV = ASCIIEncoding.ASCII.GetBytes(key);
ICryptoTransform aesEncrypt = aes.CreateEncryptor(); CryptoStream CrStream = new CryptoStream(fsOut, aesEncrypt, CryptoStreamMode.Write);
byte[] bytearrayinput = new byte[fsIn.Length - 1]; fsIn.Read(bytearrayinput, 0, bytearrayinput.Length); CrStream.Write(bytearrayinput, 0, bytearrayinput.Length);
}
public static void DecryptData(string sFileIn, string sFileOut, string key) { AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); aes.Key = ASCIIEncoding.ASCII.GetBytes(key); aes.IV = ASCIIEncoding.ASCII.GetBytes(key);
FileStream fsread = new FileStream(sFileIn, FileMode.Open, FileAccess.Read); ICryptoTransform aesDecrypt = aes.CreateDecryptor(); CryptoStream CrStream = new CryptoStream(fsread, aesDecrypt, CryptoStreamMode.Read);
StreamWriter fsDecrypted = new StreamWriter(sFileOut); fsDecrypted.Write(new StreamReader(CrStream).ReadToEnd()); fsDecrypted.Flush(); fsDecrypted.Close();
} } } |
Wäre echt dankbar wenn jemand von euch den Fehler findet
mfg
Philipp
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 09.04.12 17:45
Wenn ich das so auf den ersten Blick richtig sehe, packst du in deine zweite Textbox einen Ordner, übergibst den dann aber als Dateinamen an deine Krypto-Funktionen.
Das hättest du dann beim Debuggen eigentlich auch sehen müssen, dass du versuchst einen FileStream auf C:\Users\DeLuXe\Desktop zu erstellen. Und das ist nun einmal kein Dateiname.
|
|
Unique C 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 09.04.12 18:00
Ah okay danke, ich glaube jetzt sehe ich auch was ich falsch gemacht habe  Vielen Dank!!!!! 
|
|
Unique C 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 09.04.12 18:10
Okay das Problem ist behoben, nun sagt er mir bei:
aes.Key = ASCIIEncoding.ASCII.GetBytes(key); - > Der angegebene Schlüssel hat keine gültige Größe für diesen Algorithmus.
Warum hat der denn nicht die richtige größe wenn ich jetzt z.B nur "00" eingebe? Müsste doch eig. egal sein 
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 09.04.12 18:44
AES benutzt Schlüsselgrößen zwischen von 128,192 oder 256 bit. Und ich glaube letzteres ist der default (Sieh dir mal nach dem erzeugen die KeySize Property des AesCryptoServiceProviders an). Genau so groß sollte dann auch dein Schlüssel sein.
|
|
Unique C 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 09.04.12 18:48
Ich lasse ja keinen "Erzeugen", der Benutzer soll ein Passwort eingeben und das soll dann der Key und der IV sein.....aber egal was ich da eingebe, kommt immer wieder diese Fehlermeldung 
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 09.04.12 18:55
Gib mal 32 einfache Zeichen (die in ASCII darstellbar sind) ein.
Und dann solltest du vielleicht nochmal nachlesen wie AES funktioniert.
|
|
Unique C 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 09.04.12 20:09
Jop, denke werde mir das nochmal alles anschauen und das Programm noch einmal komplett neu schreiben ^^ Danke aber für die Hilfe! 
|
|
|