Entwickler-Ecke
Sonstiges (.NET) - Fehler beim Crypten - Hilfe!!
Unique C - Mo 09.04.12 16:43
Titel: Fehler beim Crypten - Hilfe!!
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:
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:
| 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:
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:
| 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 - 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 - Mo 09.04.12 18:00
Ah okay danke, ich glaube jetzt sehe ich auch was ich falsch gemacht habe :) Vielen Dank!!!!! :)
Unique C - 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 - 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 - 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 - 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 - 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!:)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!