首页 > 解决方案 > SQL密码解密成功但在C#密码中运行项目时无法获取解密密码

问题描述

我已经在 SQL Server 中进行了加密和解密,但是当我登录密码时没有解密。以下代码用于加密密码字段。

insert into login values('admin',ENCRYPTBYPASSPHRASE('SHA2_256','admin'))

下面的代码是为解密密码字段制作的。

select username, CONVERT(VARBINARY(50),DECRYPTBYPASSPHRASE('SHA2_256',pass))FROM LOGIN

但是当我登录时显示密码不匹配C#

下面是不起作用的 C# 代码。

namespace login_Encrypt

{ public partial class Form1 : Form { //静态字符串解密;公共 Form1() { InitializeComponent(); }

    private void login_Click(object sender, EventArgs e)
    {
        string uid = txtuser.Text;
        string pwd = txtpass.Text;
        string CPass = txtpass.Text.Trim();
        SqlConnection con = new SqlConnection(@"Data Source=SANJAY;Initial Catalog=prectic;Integrated Security=True");
        con.Open();
        SqlCommand cmd = new SqlCommand("select * from login where username='" + txtuser.Text + "' AND pass='" + txtpass.Text + "'", con);
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        DataTable ds = new DataTable();
        sda.Fill(ds);

        if (ds.Rows.Count > 0)
        {
            string t = ds.Rows[0]["pass"].ToString();
            string Dec = Decrypt(t.ToString(), "SHA2_256");
            //string NPass = (Dec + "MD5").ToLower();

            lblmess.Visible = true;
            lblmess.Text = "Matched";

        }
        else
        {
            lblmess.Text = "Sanjay";
        }
    }
        /*if (ds.Tables[0].Rows.Count > 0)
        {
            user = ds.Tables[0].Rows[0]["username"].ToString();
            pass = ds.Tables[0].Rows[0]["pass"].ToString();


                con.Close();
                Decrypt(pass);
                if(user==txtuser.Text && decrypted==txtpass.Text)
                {
                    lblmess.Text="success";
                }
          }*/


    public string Decrypt(string input, string key)
    {
        byte[] inputArray = Convert.FromBase64String(input);
        TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
        MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
        tripleDES.Key = MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
        //tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
        tripleDES.Mode = CipherMode.ECB;
        tripleDES.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = tripleDES.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
        tripleDES.Clear();
        return UTF8Encoding.UTF8.GetString(resultArray);
    }

}

}

有谁知道如何在运行时解密密码?请给我一个解决方案。

标签: c#sql-server

解决方案


推荐阅读