Introduction
Some days ago, I lost my cellphone. All of my contact numbers were in the cellphone and I lost them. Miraculously I found my cellphone, but I decided to create a phone book application to store my contacts. This application was written in C# and LINQ. I used an XML file to store contacts and I encoded them with the 3DES algorithm to protect them.
Application Features
Live Search
You could search your contacts as Live.
Multi Users
The application can have several users. Each user can just see his/her contacts.
Password Reminder
If you want to use this feature, you have to enter a valid User name and Password of your SmptClient in C# code.
Also, you can enter your Gmail's user name and password. You have to enter them in Forgets the password region in UserForm.cs.
try
{
NetworkCredential loginInfo = new NetworkCredential("username", "password");
MailMessage msg = new MailMessage();
msg.From = new MailAddress("sth@gmail.com");
msg.To.Add(new MailAddress(user.First().Attribute("Email").Value));
msg.Subject = "Phonebook Password";
msg.Body = "Yours Password = " + password;
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient("smtp.gmail.com");
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = loginInfo;
client.Send(msg);
MessageBox.Show("Your password has been sent to your email", "Email sent",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
At last, compile the project with new data and use it.
Security
To protect contacts, I've used .NET 3DES classes.
public static void EncryptToFile(String Data, String FileName, byte[] Key, byte[] IV)
{
try
{
FileStream fStream = File.Open(FileName, FileMode.Create);
CryptoStream cStream = new CryptoStream
(fStream, new TripleDESCryptoServiceProvider().
CreateEncryptor(Key, IV), CryptoStreamMode.Write);
StreamWriter sWriter = new StreamWriter(cStream);
sWriter.WriteLine(Data);
sWriter.Close();
cStream.Close();
fStream.Close();
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file access error occurred: {0}", e.Message);
}
}
public static string DecryptFromFile(String FileName, byte[] Key, byte[] IV)
{
try
{
FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
CryptoStream cStream = new CryptoStream
(fStream, new TripleDESCryptoServiceProvider().
CreateDecryptor(Key, IV), CryptoStreamMode.Read);
StreamReader sReader = new StreamReader(cStream);
string val = sReader.ReadToEnd();
sReader.Close();
cStream.Close();
fStream.Close();
return val;
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("A file access error occurred: {0}", e.Message);
return null;
}
}
No one can see your data in the XML file, because it is encoded. I suggest to change the Key and the Vector and use your own ones in TripleDES.cs. These are default Key and Vector:
public static byte[] ByteKey =
new byte[] { 65, 20, 35, 105, 249, 97, 242, 87, 163, 127, 124, 121,
73, 225, 209, 103, 5, 198, 68, 221, 122, 14, 224, 2 };
public static byte[] IV = new byte[] { 160, 175, 98, 111, 208, 167, 177, 23 };
If you are a beginner in 3DES, you can use this application to change your Key and IV.
Settings
There are some cool settings to use the application better.
You can change the Direction of contacts or type of Calendar to show item's register date. You can also change the Application's font size.
History
- 18th July, 2009: First post
- 21st July, 2009: Updated
- 9th September, 2009: Updated