Forums Neueste Beiträge
 

System.Security.Cryptography - verschlüsseln von Nicht-Textfiles

26/02/2009 - 15:59 von Andy | Report spam
Hallo Zusammen,
ich versuche zu ver- und zu entschlüsseln. Aber egal was ich ausprobiere -
meine exe-, pdf-files usw. lassen sich nicht wieder entschlüsseln,
"funktionieren" danach also nicht mehr. Bei Textfiles funktioniert dies ohne
Probleme.

Ich hab schon einiges gegoogelt, aber komme nicht wirklich dahinter. In
meinem "schlauen Buch" hab ich eine Klasse zur Verschlüsselung abgetippt (8
Seiten). Das Ergebnis ist das gleiche (soweit man das beurteilen kann).

Habt ihr irgendwelche Ideen?

viele Grüsse
Andy

VS2008 auf W2003 mit SP2 eng .net framwork 3.5

Hier (m)ein angepasster Code basierend auf:
http://www.geekpedia.com/tutorial22...sharp.html

Namespace EncryptionTest
{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}



private void button2_Click(object sender, EventArgs e)

{

if (openFile.ShowDialog() == DialogResult.OK)

{

textBox1.Text = openFile.FileName;

}

}



private void button1_Click(object sender, EventArgs e)

{

// After the user chose where he wants the key file saved

if (saveKeyFile.ShowDialog() == DialogResult.OK)

{

// And after the user chose where he wants the encrypted file saved

if (saveEncFile.ShowDialog() == DialogResult.OK)

{

FileStream fsFileOut = File.Create(saveEncFile.FileName);

// The chryptographic service provider we're going to use


TripleDESCryptoServiceProvider cryptAlgorithm = new
TripleDESCryptoServiceProvider();

// This object links data streams to cryptographic values

CryptoStream csEncrypt = new CryptoStream(fsFileOut,
cryptAlgorithm.CreateEncryptor(), CryptoStreamMode.Write);

// This stream writer will write the new file

StreamWriter swEncStream = new StreamWriter(csEncrypt);

// This stream reader will read the file to encrypt

StreamReader srFile = new StreamReader(textBox1.Text);

// Loop through the file to encrypt, line by line

string currLine = srFile.ReadLine();

while (currLine != null)

{

// Write to the encryption stream

swEncStream.Write(currLine);

currLine = srFile.ReadLine();

}

// Wrap things up

srFile.Close();

swEncStream.Flush();

swEncStream.Close();





// Create the key file

FileStream fsFileKey = File.Create(saveKeyFile.FileName);

BinaryWriter bwFile = new BinaryWriter(fsFileKey);

bwFile.Write(cryptAlgorithm.Key);

bwFile.Write(cryptAlgorithm.IV);

bwFile.Flush();

bwFile.Close();

}

}

}



private void button4_Click(object sender, EventArgs e)

{

if (openFile.ShowDialog() == DialogResult.OK)

{

textBox2.Text = openFile.FileName;

}

}



private void button3_Click(object sender, EventArgs e)

{

{

// After the encrypted file has been selected for opening

if (openKeyFile.ShowDialog() == DialogResult.OK)

{

// After the location where the decrypted file should be saved has been
decided

if (saveDecFile.ShowDialog() == DialogResult.OK)

{

// The encrypted file

FileStream fsFileIn = File.OpenRead(textBox2.Text);

// The key

FileStream fsKeyFile = File.OpenRead(openKeyFile.FileName);

// The decrypted file

FileStream fsFileOut = File.Create(saveDecFile.FileName);





// Prepare the encryption algorithm and read the key from the key file

TripleDESCryptoServiceProvider cryptAlgorithm = new
TripleDESCryptoServiceProvider();

BinaryReader brFile = new BinaryReader(fsKeyFile);

cryptAlgorithm.Key = brFile.ReadBytes(24);

cryptAlgorithm.IV = brFile.ReadBytes(8);





// The cryptographic stream takes in the encrypted file

CryptoStream csEncrypt = new CryptoStream(fsFileIn,
cryptAlgorithm.CreateDecryptor(), CryptoStreamMode.Read);





// Write the new unecrypted file

StreamReader srCleanStream = new StreamReader(csEncrypt);

StreamWriter swCleanStream = new StreamWriter(fsFileOut);

swCleanStream.Write(srCleanStream.ReadToEnd());

swCleanStream.Close();

fsFileOut.Close();

srCleanStream.Close();

}

}

}



}


}

}
 

Lesen sie die antworten

#1 Kerem Gümrükcü
26/02/2009 - 18:52 | Warnen spam
Hallo Andy,

Du arbeitest ja auch mit einem StreamWriter/Reader, der für
Textdateien ausgelegt ist. Du musst in so einem Fall mit einer
anderen Stream-Klasse arbeiten, z.b. BinaryWriter/Reader und
dann die Verschlüsselung auf die Bytes anwenden, die Du so
bekommen hast. Dann hast Du auch keine Probleme mehr!

Google mal nach beispielen im Netz, da gibts sicher welche!

z.B. das:

[File Encryption/Decryption with Hash Verification in C#]
http://www.codeproject.com/KB/secur...crypt.aspx

Auch hier wird der BinaryWriter/Reader verwendet!

Grüße

Kerem

Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/soft...iceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
"This reply is provided as is, without warranty express or implied."

Ähnliche fragen