Bertrand Russell
asked on
client-server application encrypt/decrypt
Hi,
I have client server application, I am trying to encrypt all data communication between client and server. Please suggest me how can i do it? Should I use System.Security.Cryptograp hy class or there is any easy way too.
Please guide,
Thanks
I have client server application, I am trying to encrypt all data communication between client and server. Please suggest me how can i do it? Should I use System.Security.Cryptograp
Please guide,
Thanks
ASKER
thanks for message. I need message level encryption
Please guide
Thanks
Please guide
Thanks
What kind of communications? Web Services (WCF) has already a built-in mechanism for that:
E.g.
See also:
* Message Security in WCF
* Chapter 7: Message and Transport Security
E.g.
<bindings>
<wsHttpBinding>
<binding name="netTcpEndpointBinding">
<security mode="message"></security>
</binding>
</wsHttpBinding>
</bindings>
See also:
* Message Security in WCF
* Chapter 7: Message and Transport Security
ASKER
It is windows service, so client is c# interface/application and server is a windows service. Please guide how to make message level encryption! thx
In this general case you need to encrypt/decrypt each message. Here you use the System.Security.Cryptograp hy namspace of the .Net framework.
See Encrypting and Decrypting Data.
See Encrypting and Decrypting Data.
ASKER
I have tried this code, it is encrypting and decrypting data well on local machine but when I send data to remote machine, the decryption fails. What is wrong in this code that make it not working on remote machine while working on local is fine!
public static byte[] Key = new byte[]{0x43, 0x72, 0x6e, 0x6d, 0x54, 0x4d, 0x65,
0x94, 0x16, 0x32, 0x44, 0x84, 0x7e, 0x18,
0x64, 0x76, 0x6e, 0x63, 0x64, 0x7a, 0x5f,
0x84, 0x7f, 0x9a};
public static string Encrypt(string toEncrypt, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
//keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
keyArray = hashmd5.ComputeHash(Key);
hashmd5.Clear();
}
else
keyArray = Key;
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray =
cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);
//Release resources held by TripleDes Encryptor
tdes.Clear();
//Return the encrypted data into unreadable string format
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
public static string Decrypt(string cipherString, bool useHashing)
{
byte[] keyArray;
//get the byte code of the string
byte[] toEncryptArray = Convert.FromBase64String(cipherString);
if (useHashing)
{
//if hashing was used get the hash code with regards to your key
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
//keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
keyArray = hashmd5.ComputeHash(Key);
//release any resource held by the MD5CryptoServiceProvider
hashmd5.Clear();
}
else
{
keyArray = Key;
}
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
//set the secret key for the tripleDES algorithm
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
//padding mode(if any extra byte added)
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(
toEncryptArray, 0, toEncryptArray.Length);
//Release resources held by TripleDes Encryptor
tdes.Clear();
//return the Clear decrypted TEXT
return UTF8Encoding.UTF8.GetString(resultArray);
}
public static Byte[] Encrypt(Byte[] toEncrypt, bool useHashing)
{
byte[] keyArray;
// byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
byte[] toEncryptArray = toEncrypt;
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
//keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
keyArray = hashmd5.ComputeHash(Key);
hashmd5.Clear();
}
else
keyArray = Key;
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
//set the secret key for the tripleDES algorithm
tdes.Key = keyArray;
//mode of operation. there are other 4 modes.
//We choose ECB(Electronic code Book)
tdes.Mode = CipherMode.ECB;
//padding mode(if any extra byte added)
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
//transform the specified region of bytes array to resultArray
byte[] resultArray =
cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);
//Release resources held by TripleDes Encryptor
tdes.Clear();
//Return the encrypted data into unreadable string format
// return Convert.ToBase64String(resultArray, 0, resultArray.Length);
return resultArray;
}
public static Byte[] Decrypt(Byte[] cipherString, bool useHashing)
{
byte[] keyArray;
//get the byte code of the string
// byte[] toEncryptArray = Convert.FromBase64String(cipherString);
byte[] toEncryptArray = cipherString;
if (useHashing)
{
//if hashing was used get the hash code with regards to your key
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
//keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
keyArray = hashmd5.ComputeHash(Key);
//release any resource held by the MD5CryptoServiceProvider
hashmd5.Clear();
}
else
{
//if hashing was not implemented get the byte code of the key
//keyArray = UTF8Encoding.UTF8.GetBytes(key);
keyArray = Key;
}
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
//set the secret key for the tripleDES algorithm
tdes.Key = keyArray;
//mode of operation. there are other 4 modes.
//We choose ECB(Electronic code Book)
tdes.Mode = CipherMode.ECB;
//padding mode(if any extra byte added)
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(
toEncryptArray, 0, toEncryptArray.Length);
//Release resources held by TripleDes Encryptor
tdes.Clear();
//return the Clear decrypted TEXT
// return UTF8Encoding.UTF8.GetString(resultArray);
return resultArray;
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Yes, thanks
Do you need protocol or message encryption? The first could be done by tunneling, e.g. SSL/SSH. So this can be done by the OS.
Message encryption means that you application needs to handled by you application.
So without further information, it's hard to guess.