Monday 11 March 2013

Encryption and Decryption of Password in ASP.NET



Introduction:

Here I will explain how to encrypt data and save it in database and how to decrypt encrypted data in database using asp.net.

Description:


First we will learn what is encryption and decryption.

Encryption is the process of translating plain text data into something that appears to be random and meaningless.
Decryption is the process of translating random and meaningless data to plain text.
Why we need to use this Encryption and decryption processes

By using this process we can hide original data and display some junk data based on this we can provide some security for our data.

Here I will explain how to encrypt data and how to save that data into database after that I will show how to decrypt that encrypted data in database and how we can display that decrypted data on form.

I have a form with four fileds username, password, firstname, lastname here I am encrypting password data and saving that data into database after that I am getting from database and decrypting the encrypted password data and displaying that data using gridview.

Design your aspx like this:


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
       <table align="center">
       <tr>
            <td colspan="2">
               <b>Encryption and Decryption of Password</b>
            </td>
      </tr>
      <tr>
           <td>
                 UserName
           </td>
            <td>
                <asp:TextBox ID="txtname" runat="server"></asp:TextBox>
            </td>
      </tr>
       <tr>
            <td>
                  Password
           </td>
            <td>
                <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
           </td>
     </tr>
     <tr>
          <td>
               FirstName
          </td>
          <td>
               <asp:TextBox ID="txtfname" runat="server"></asp:TextBox>
          </td>
     </tr>
     <tr>
          <td>
               LastName
          </td>
          <td>
               <asp:TextBox ID="txtlname" runat="server"></asp:TextBox>
          </td>
     </tr>
      <tr>
           <td>
           </td>
           <td>
                <asp:Button ID="btnSubmit" runat="server" Text="Submit"                                onclick="btnSubmit_Click" />
          </td>
   </tr>
</table>
</div>
<div>
<table align="center">
   <tr>
       <td>
            <b>Encryption of Password Details</b>
       </td>
   </tr>
   <tr>
       <td>
             <asp:GridView ID="gvUsers" runat="server" CellPadding="4" BackColor="White"
              BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px">
              <RowStyle BackColor="White" ForeColor="#330099" />
              <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
              <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
              <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
              <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC"
              HorizontalAlign="Left"/>
              </asp:GridView>
      </td>
   </tr>
</table>
</div>
<div>
<table align="center">
     <tr>
         <td>
              <b>Decryption of Password Details</b>
         </td>
     </tr>
     <tr>
          <td>
               <asp:GridView ID="gvdecryption" runat="server" BackColor="White"
                 BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4"
                 onrowdatabound="gvdecryption_RowDataBound">
                 <RowStyle BackColor="White" ForeColor="#330099" />
                 <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
                 <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
                 <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
                 <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
              </asp:GridView>
         </td>
     </tr>
</table>
</div>
</form>
</body>
</html>
  
   
       ----------------------------------------------------------------------------

After that add System.Text namespace in code behind because in this namespace contains classes representing ASCII and Unicode character encodings 

After that add following code in code behind and design one table in database with four fields and give name as "SampleUserdetails"
       ------------------------------------------------------------------------------

Design your .CS like this:
private const string strconneciton = "Data Source=.\\SQLEXPRESS;Initial Catalog=MySamplesDB;Integrated Security=True";
SqlConnection con = new SqlConnection(strconneciton);
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindencryptedData();
BindDecryptedData();
}
}
/// <summary>
/// btnSubmit event is used to insert user details with password encryption
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSubmit_Click(object sender, EventArgs e)
{
string strpassword = Encryptdata(txtPassword.Text);
con.Open();
SqlCommand cmd = new SqlCommand("insert into SampleUserdetails(UserName,Password,FirstName,LastName) values('" + txtname.Text + "','" + strpassword + "','" + txtfname.Text + "','" + txtlname.Text + "')", con);
cmd.ExecuteNonQuery();
con.Close();
BindencryptedData();
BindDecryptedData();
}
/// <summary>
/// Bind user Details to gridview
/// </summary>
protected void BindencryptedData()
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from SampleUserdetails", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
gvUsers.DataSource = ds;
gvUsers.DataBind();
con.Close();
}
/// <summary>
/// Bind user Details to gridview
/// </summary>
protected void BindDecryptedData()
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from SampleUserdetails", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
gvdecryption.DataSource = ds;
gvdecryption.DataBind();
con.Close();
}
/// <summary>
/// Function is used to encrypt the password
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
private string Encryptdata(string password)
{
string strmsg = string.Empty;
byte[] encode = new byte[password.Length];
encode = Encoding.UTF8.GetBytes(password);
strmsg = Convert.ToBase64String(encode);
return strmsg;
}
/// <summary>
/// Function is used to Decrypt the password
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
private string Decryptdata(string encryptpwd)
{
string decryptpwd = string.Empty;
UTF8Encoding encodepwd = new UTF8Encoding();
Decoder Decode = encodepwd.GetDecoder();
byte[] todecode_byte = Convert.FromBase64String(encryptpwd);
int charCount = Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
char[] decoded_char = new char[charCount];
Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
decryptpwd = new String(decoded_char);
return decryptpwd;
}
/// <summary>
/// rowdatabound condition is used to change the encrypted password format to decryption format
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvdecryption_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string decryptpassword = e.Row.Cells[1].Text;
e.Row.Cells[1].Text = Decryptdata(decryptpassword);
}
}
                   --------------------------------------------------------------------

 Download Sample Code: https://www.box.com/shared/1yxdju5gfq

Demo: 




 

5 comments:

  1. super article sir. I searched lot of website. But I could found the correct solution. Please post more article about ASP.NET . Thank u sir!......

    ReplyDelete
  2. hi.
    Sir I Run Your program but i have One error occured
    Invalid length for a Base-64 char array.

    please help me What Shhould i do

    ReplyDelete
  3. Solve This Error Invalid length for a Base-64 char array.

    No Need to Cahnge this encryptpwd.Replace('', '+'));

    Try this Only Change index of Cell

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
    string decryptpassword = e.Row.Cells[1].Text;
    e.Row.Cells[1].Text = Decryptdata(decryptpassword);
    }

    Thank you...........

    ReplyDelete
  4. Thank you so much sir!. This article is really useful to me. I need more post about ASP.NET............... Thank u .............

    ReplyDelete