Cryptography mit DES

liam

Mitglied
Hi,

ich verschlüssel eine Hashtable die in einer mit einen ResourceWriter geschrieben Datei steht, dass klappt auch soweit so gut nur wenn ich die Datei wieder herstellen will hiermit

Code:
CryptoStream cryptostreamDecr=null;
FileStream fsread=null;
StreamWriter swriter=null;

try
{
		 fsread=newFileStreamcommonpath+@"\data.res",FileMode.Open,FileAccess.Read);
ICryptoTransform desdecrypt = des.CreateDecryptor();
cryptostreamDecr = new cryptoStreamfsread,desdecrypt,CryptoStreamMode.Read);
swriter = new StreamWriter(commonpath+@"\data1.res");
swriter.Write(new StreamReader(cryptostreamDecr).ReadToEnd());// Hier ist der Fehler
swriter.Flush();
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
finally
{
fsread.Close();
cryptostreamDecr.Close();
swriter.Close();
}
Bekomme ich an der makierten stelle den Fehler "Ungültige Daten" das liegt wohl an der Umwandlung mit dem STreamReader, aber wie kann ich denn dekodierten Stream in eine Datei schreiben?
 
Versuch mal.
Code:
if ( EnOrDeCrypt )	// verschlüsseln
	m_encStream = new CryptoStream( m_fout, DES.CreateEncryptor( Key, Vector ), CryptoStreamMode.Write );
else			// entschlüsseln
	m_encStream = new CryptoStream( m_fout, DES.CreateDecryptor( Key, Vector ), CryptoStreamMode.Read );

while( rdlen < totlen ) {

	bin = new byte[ m_iCryptBufferLength < ( totlen - rdlen ) ? m_iCryptBufferLength : (totlen - rdlen ) ];
	len = m_fin.Read( bin, 0, bin.Length );
	m_encStream.Write( bin, 0, len );
	rdlen = rdlen + len;
}
m_encStream.FlushFinalBlock();
m_encStream.Close();
Legende:
m_fout = swriter; // Dein Cryptostream schreibt selber in den Stream.
m_encStream = cryptostreamDecr;
m_iCryptBufferLength = // in welchen Häppchen Du verschlüsseln willst. ( Bsp. 128 )

Ich hoffe ich konnte helfen.

MfG cosmo
 
Zuletzt bearbeitet:
Ich weiß jetzt nicht genau woran das liegt. Aber kann das sein dass das DES-Objekt bei Dir immer ohne Key Initalisiert wird?
Achte bitte darauf das Du Häppchenweise ver- und entschlüsselst. Mal Dir aus was passiert enn Du eine zu große Datei erwischst. --> Arbeitsspeicher voll!
Wenn's kleine Dateien sind ist's egal. Es reicht aus wenn Du "m_iCryptBufferLength"
einen festen Wert zuweist und die While Schleife verwendest. Alles was kleiner ist, wird demzufolge nicht portioniert.
Außerdem kannst Du so beim Debuggen jedes Byte mitzählen.

MfG cosmo
 
Zurück