C# 添加记录时加密和解密失败

C# 添加记录时加密和解密失败,c#,asp.net,ado.net,webforms,C#,Asp.net,Ado.net,Webforms,我正在使用一个简单的程序,现在我遇到了一个问题,即加密和解密密码并将其存储在数据库中。我使用的逻辑是加密密码,但它没有存储在数据库中,而是抛出一个如下所示的错误 System.Data.SqlClient.SqlException:靠近“=”的语法不正确 我的代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using Syste

我正在使用一个简单的程序,现在我遇到了一个问题,即加密和解密密码并将其存储在数据库中。我使用的逻辑是加密密码,但它没有存储在数据库中,而是抛出一个如下所示的错误

System.Data.SqlClient.SqlException:靠近“=”的语法不正确

我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

namespace WebApplication5
{
    public partial class WebForm6 : 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 USERNAME=@USERNAME and PASSWORD=@PASSWORD ", con1);
            cmd1.Parameters.AddWithValue("@username", txtUserName.Text);
            cmd1.Parameters.AddWithValue("@password", txtPassword.Text);
            SqlDataReader dr = cmd1.ExecuteReader();
            if (dr.HasRows)
            {
                ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('userName is already availables')</script>");

            }

            else
            {

                SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TestQueryConnectionString"].ConnectionString);
                con.Open();
                string strQuery = EncodePasswordToBase64("insert into admin( USERNAME,PASSWORD) values('" + txtUserName.Text + "','" + txtPassword.Text + "')");
                connection = new SqlConnection(ConfigurationManager.ConnectionStrings["TestQueryConnectionString"].ConnectionString);
                connection.Open();
                SqlCommand cmd = new SqlCommand(strQuery, connection);
                cmd.ExecuteNonQuery();
                connection.Close();
                Response.Redirect("login.aspx");

            }

            con1.Close();
        }
        public static string EncodePasswordToBase64(string password)
        {
            try
            {
                byte[] encData_byte = new byte[password.Length];
                encData_byte = System.Text.Encoding.UTF8.GetBytes(password);
                string encodedData = Convert.ToBase64String(encData_byte);
                return encodedData;
            }
            catch (Exception ex)
            {
                throw new Exception("Error in base64Encode" + ex.Message);
            }
        }

    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用System.Data.SqlClient;
使用系统配置;
使用系统数据;
命名空间WebApplication5
{
公共部分类WebForm6:System.Web.UI.Page
{
SqlConnection连接;
受保护的无效页面加载(对象发送方、事件参数e)
{
连接=新的SqlConnection(ConfigurationManager.ConnectionString[“TestQueryConnectionString”].ConnectionString);
}
受保护的void btnsupmit\u单击(对象发送者,事件参数e)
{
SqlConnection con1=新的SqlConnection(ConfigurationManager.ConnectionString[“TestQueryConnectionString”].ConnectionString);
con1.Open();
SqlCommand cmd1=新SqlCommand(“从管理员中选择*,其中用户名=@USERNAME,密码=@PASSWORD”,con1);
cmd1.Parameters.AddWithValue(“@username”,txtUserName.Text);
cmd1.Parameters.AddWithValue(“@password”,txtPassword.Text);
SqlDataReader dr=cmd1.ExecuteReader();
如果(哈斯罗博士)
{
RegisterStartupScript(Page.GetType(),“validation”,“alert('用户名已可用')”);
}
其他的
{
SqlConnection con=新的SqlConnection(ConfigurationManager.ConnectionString[“TestQueryConnectionString”].ConnectionString);
con.Open();
字符串strQuery=EncodePasswordToBase64(“插入管理员(用户名、密码)值(“+TxtSerName.Text+”、“+txtPassword.Text+”)”);
连接=新的SqlConnection(ConfigurationManager.ConnectionString[“TestQueryConnectionString”].ConnectionString);
connection.Open();
SqlCommand cmd=新的SqlCommand(strQuery,connection);
cmd.ExecuteNonQuery();
connection.Close();
重定向(“login.aspx”);
}
con1.Close();
}
公共静态字符串编码器PasswordToBase64(字符串密码)
{
尝试
{
字节[]encData_byte=新字节[password.Length];
encData_byte=System.Text.Encoding.UTF8.GetBytes(密码);
string encodedData=Convert.ToBase64String(encData_字节);
返回编码数据;
}
捕获(例外情况除外)
{
抛出新异常(“base64Encode中的错误”+ex.Message);
}
}
}
}

问题是:我在这里做错了什么?

您正在对整个查询进行编码,而应该只对密码进行编码

string strQuery = EncodePasswordToBase64("insert ....
应该是:

string strQuery = "insert into admin( USERNAME,PASSWORD) values('" + txtUserName.Text + 
                   "','" +  EncodePasswordToBase64(txtPassword.Text) + "')");
您应该使用SqlParameter并进行参数化查询,而不是进行字符串连接

string strQuery = "insert into admin( USERNAME,PASSWORD) values(@pUserName, @pPassword)";
SqlCommand cmd = new SqlCommand(strQuery);
cmd.Parameters.AddWithValue("@pUserName", txtUserName.Text");
cmd.Parameters.AddWithValue("@pPassword", EncodePasswordToBase64(txtPassword.Text))

@user2189723,如果这是一个新问题,你可以问一个新问题,这将帮助你得到更好的答案,我已经标记了一个新问题,请注意,并尽快回答我,标记的问题在说明中还有一个