Click here to Skip to main content
15,906,341 members
Home / Discussions / C#
   

C#

 
GeneralRe: GDI+ font and scalable graphics Pin
Mazdak1-Oct-03 3:46
Mazdak1-Oct-03 3:46 
GeneralRe: GDI+ font and scalable graphics Pin
Member 5506441-Oct-03 4:03
Member 5506441-Oct-03 4:03 
GeneralRe: GDI+ font and scalable graphics Pin
azusakt1-Oct-03 15:21
azusakt1-Oct-03 15:21 
Generalthreading issue... Pin
profoundwhispers1-Oct-03 0:53
profoundwhispers1-Oct-03 0:53 
GeneralRe: threading issue... Pin
Blake Coverett1-Oct-03 1:50
Blake Coverett1-Oct-03 1:50 
GeneralRe: threading issue... Pin
profoundwhispers1-Oct-03 1:56
profoundwhispers1-Oct-03 1:56 
GeneralRe: threading issue... Pin
Blake Coverett1-Oct-03 8:22
Blake Coverett1-Oct-03 8:22 
GeneralEncryption/Decryption problem Pin
3ddA30-Sep-03 23:50
3ddA30-Sep-03 23:50 
Hi!

I'm working on a P2P app, with security built in, it's going to be released as open source as soon as I have a working prototype...

I've gotten as far as exchanging messages, encrypting username password with RSA and exchanging a common symmetric key. But when I try to decrypt messages encrypted with the sym-key I get an error:
Binary stream does not contain a valid BinaryHeader, 95 possible causes...

I have the following code:
<br />
public byte[] SecureSerialize(byte[] key, byte[] iv)<br />
{<br />
	if (encrypted == Encryption.NotEncrypted) throw new Exception("Message type should be serialized with Serialize()");<br />
<br />
	byte[] streamBuffer = new byte[BufferSize];<br />
<br />
	streamBuffer[0] = (byte)msgType;<br />
	streamBuffer[1] = (byte)encrypted;<br />
<br />
	MemoryStream ms = new MemoryStream(streamBuffer, sizeOffset, BufferSize - sizeOffset);<br />
<br />
	RijndaelManaged rij = new RijndaelManaged();<br />
	CryptoStream cs = new CryptoStream(ms, rij.CreateEncryptor(key, iv), CryptoStreamMode.Write);<br />
<br />
	BinaryFormatter bf = new BinaryFormatter();<br />
	bf.Serialize(cs, this);<br />
<br />
	cs.Flush();<br />
	ms.Flush();<br />
<br />
	SHA1Managed hashAlg = new SHA1Managed();<br />
	byte[] hash = hashAlg.ComputeHash(streamBuffer, 0, (int)ms.Position + sizeOffset);<br />
	bf.Serialize(ms, hash);<br />
<br />
	byte[] returnBuffer = new byte[(int)ms.Position + sizeOffset];<br />
	Array.Copy(streamBuffer, 0, returnBuffer, 0, (int)ms.Position + sizeOffset);<br />
<br />
	return returnBuffer;<br />
}<br />
<br />
public static UdpMessage SecureDeserialize(byte[] msg, byte[] key, byte[] iv)<br />
{<br />
	if ((Encryption)msg[1] == Encryption.NotEncrypted) throw new Exception("Message type should be deserialized with Deserialize()");<br />
<br />
	byte[] decryptedBuffer = msg;<br />
<br />
	MemoryStream ms = new MemoryStream(decryptedBuffer, sizeOffset, decryptedBuffer.Length - sizeOffset);<br />
<br />
	RijndaelManaged rij = new RijndaelManaged();<br />
	CryptoStream cs = new CryptoStream(ms, rij.CreateDecryptor(key, iv), CryptoStreamMode.Read);<br />
<br />
	BinaryFormatter bf = new BinaryFormatter();<br />
	UdpMessage message = (UdpMessage)bf.Deserialize(cs);<br />
<br />
	cs.Flush();<br />
	ms.Flush();<br />
<br />
	message.msgType = (MessageType)msg[0];<br />
	message.encrypted = (Encryption)msg[1];<br />
<br />
	SHA1Managed hashAlg = new SHA1Managed();<br />
	byte[] calculatedHash = hashAlg.ComputeHash(decryptedBuffer, 0, (int)ms.Position + sizeOffset);<br />
	byte[] msgHash = (byte[])bf.Deserialize(ms);<br />
	for (int i = 0 ; i < calculatedHash.Length ; i++)<br />
		if (calculatedHash[i] != msgHash[i])<br />
			throw new CryptographicException("Hash missmatch");<br />
<br />
	return message;<br />
}<br />


The same code without the encryption stuff works fine.
Anybody has a clue what's wrong?

And while I'm at it... Is there any good way to protect against man in the middle attacks when exchanging keys? Is the application very vunerable with out that protection?

/Regards 3ddA
GeneralRe: Encryption/Decryption problem Pin
Julian Bucknall [MSFT]1-Oct-03 5:35
Julian Bucknall [MSFT]1-Oct-03 5:35 
GeneralRe: Encryption/Decryption problem Pin
3ddA1-Oct-03 6:31
3ddA1-Oct-03 6:31 
GeneralRe: Encryption/Decryption problem, prettier code now Pin
3ddA1-Oct-03 7:28
3ddA1-Oct-03 7:28 
GeneralTCP Remote Endpoints Pin
Tatham30-Sep-03 19:50
Tatham30-Sep-03 19:50 
GeneralRe: TCP Remote Endpoints Pin
Blake Coverett1-Oct-03 1:36
Blake Coverett1-Oct-03 1:36 
GeneralRe: TCP Remote Endpoints Pin
Tatham1-Oct-03 4:03
Tatham1-Oct-03 4:03 
GeneralRe: TCP Remote Endpoints Pin
Blake Coverett1-Oct-03 8:25
Blake Coverett1-Oct-03 8:25 
GeneralRe: TCP Remote Endpoints Pin
Tatham2-Oct-03 3:09
Tatham2-Oct-03 3:09 
GeneralRe: TCP Remote Endpoints Pin
Blake Coverett2-Oct-03 8:50
Blake Coverett2-Oct-03 8:50 
GeneralGeting/seting properties on files. Pin
Mattias Olgerfelt30-Sep-03 14:41
Mattias Olgerfelt30-Sep-03 14:41 
GeneralRe: Geting/seting properties on files. Pin
J. Dunlap30-Sep-03 15:05
J. Dunlap30-Sep-03 15:05 
GeneralRe: Geting/seting properties on files. Pin
Mattias Olgerfelt2-Oct-03 14:46
Mattias Olgerfelt2-Oct-03 14:46 
GeneralTransparent Background for PocketPC Pin
Rowdy12330-Sep-03 14:07
Rowdy12330-Sep-03 14:07 
GeneralRe: Transparent Background for PocketPC Pin
J. Dunlap30-Sep-03 14:12
J. Dunlap30-Sep-03 14:12 
GeneralRe: Transparent Background for PocketPC Pin
Rowdy12330-Sep-03 14:22
Rowdy12330-Sep-03 14:22 
GeneralRe: Transparent Background for PocketPC Pin
J. Dunlap30-Sep-03 14:28
J. Dunlap30-Sep-03 14:28 
QuestionFile/Folder Name Problems - How to get around? Pin
Khang Nguyen30-Sep-03 12:44
Khang Nguyen30-Sep-03 12:44 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.