하나

2013-03-20 2 views
0
는 ENC와 PBL과에게 DB를 기억하고 있었다

전회 이제 PBL 십이이고 입력이없는하나

같이 DB로부터 데이터를 검색하는 것이 오차를 보이고

: 그것과 같은 유효한 자료-64 문자열이 아닌 기본을

코드이처럼 패딩 문자 중 64 문자, 두 개 이상의 패딩 문자 또는 공백이 아닌 문자가 포함

using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using System.Security.Cryptography; 
using System.Data.SqlClient; 


namespace WebApplication5 
{ 
    public partial class WebForm4 : System.Web.UI.Page 
    { 
     SqlConnection connection; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      connection = new SqlConnection(ConfigurationManager.ConnectionStrings["TestQueryConnectionString"].ConnectionString); 
     } 

     protected void btnSubmit_Click(object sender, EventArgs e) 
     { 
      SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["TestQueryConnectionString"].ConnectionString); 
      con1.Open(); 
      SqlCommand cmd1 = new SqlCommand("select * from admin where [email protected] and [email protected] ", con1); 
      cmd1.Parameters.AddWithValue("@username", txtUserName.Text); 
      string strpassword = DecodeFrom64(txtPassword.Text); 
      cmd1.Parameters.AddWithValue("@password", txtPassword.Text); 
      SqlDataAdapter da = new SqlDataAdapter(cmd1); 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 
      if (dt.Rows.Count > 0) 
      { 
       Response.Redirect("emplist.aspx"); 
      } 
      else 
      { 
       ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Invalid Username and Password')</script>"); 
      } 
      con1.Close(); 
     } 
     protected void btnClear_Click(object sender, EventArgs e) 
     { 
      txtUserName.Text = ""; 
      txtPassword.Text = ""; 
     } 
     public string DecodeFrom64(string encodedData) 
     { 
      System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding(); 
      System.Text.Decoder utf8Decode = encoder.GetDecoder(); 
      byte[] todecode_byte = Convert.FromBase64String(encodedData); 
      int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length); 
      char[] decoded_char = new char[charCount]; 
      utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0); 
      string result = new String(decoded_char); 
      return result; 
     } 

    } 

} 
+0

@ user2189723 적절한 사용자 이름을 지정하십시오. –

+0

당신은 질문에서 어떤 사람을 태깅하지 않았고/붙일 수 없다. 새로운 문제가 새로운 질문을하는 경우 나는 말했다. 또한 당신은 질문에 더 나은 제목을 줄 필요가 있습니다 그렇지 않으면 downvotes 얻을 수 있습니다. – Habib

+0

속기를 사용하는 대신 전체 단어를 써주십시오. "pbl"및 "enc"와 같은 것을 쓰는 방법은 질문을 매우 어렵게 만듭니다. – jadarnel27

답변

2

미안 하비브 아니지만,

txtPassword.Text는 사용자가 입력 한 텍스트가됩니다. 사용자는 대부분 Base64로 인코딩 된 데이터를 입력하지 않습니다. 사용자가 입력 한 암호가 Base64로 인코딩되었다고 가정하는 것은 완전히 잘못되었습니다.

당신은 심지어 나중에 그것을 사용하지 않는 것

string strpassword = DecodeFrom64(txtPassword.Text); 

도움이 될 것입니다이 줄을 제거하기.

또한 암호를 암호화하려면 SHA와 같은 단방향 해시를 소금으로 사용하십시오. Base64는 암호화하지 않습니다. 일반 텍스트가 아니지만 디코딩하기가 쉽습니다.

이 편집 :
가 인코딩 된 암호와 일치하려면, 사용자가 입력 한 암호를 인코딩 한 후 선택해야합니다.

string strpassword = EncodeToBase64(txtPassword.Text); 
cmd1.Parameters.AddWithValue("@password", strpassword); 
+0

나는 db로부터 데이터를 deccrept하고 어떻게 코딩해야 하는가?, – BHARATH

+0

어떻게 그 nunespascal을 할 것인가 sir ..., – BHARATH

+0

이미 인코딩 한 것을 디코딩 만 할 수있다. 따라서 인코딩 방법에 따라 다릅니다. db에서 인코딩 한 암호와 암호를 비교하려면 암호를 해독하지 말고 암호를 인코딩해야합니다. – nunespascal