Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PHP phpass转换为C脚本_C#_Password Encryption_Phpass - Fatal编程技术网

C# PHP phpass转换为C脚本

C# PHP phpass转换为C脚本,c#,password-encryption,phpass,C#,Password Encryption,Phpass,我有一个网站,通过以下脚本进行身份验证,并生成一个以$p$B开头的密码 public static function hashPassword($plainPassword) { // use openwall.com phpass class $hasher = new PasswordHash(8, true); return $hasher->HashPassword($plainPassword); } public static function ch

我有一个网站,通过以下脚本进行身份验证,并生成一个以$p$B开头的密码

public static function hashPassword($plainPassword)
{
    // use openwall.com phpass class
    $hasher = new PasswordHash(8, true);
    return $hasher->HashPassword($plainPassword);
}


public static function checkPassword($plainPassword, $hashedPassword)
{
    // try with md5
    if (md5($plainPassword) == $hashedPassword) return true;
    // using openwall.com phpass class
    $hasher = new PasswordHash(8, true);
    return $hasher->CheckPassword( $plainPassword, $hashedPassword );
}
使用此类:

}


我有兴趣在登录时为使用C的应用程序对相同的用户使用相同的加密模式。有人能帮我从PHP到C的转换吗?

这是新的用户注册部分:

        private void button3_Click(object sender, EventArgs e)
    {
        MySqlConnection sqlcon = new MySqlConnection(@"server=xx.xx.xx.xx;user id=user;password=password;persistsecurityinfo=False;database=website;sslmode=None;");
        string query = "Select * from users Where username= '" + tbUser.Text + "'";
        MySqlDataAdapter sda = new MySqlDataAdapter(query, sqlcon);
        DataTable dtbl = new DataTable();
        sda.Fill(dtbl);
        if (dtbl.Rows.Count > 0)
        {
            MessageBox.Show("Username exist!");
        }
        else
        {
            if(tbUser.Text == "" | tbPass.Text == ""){
                MessageBox.Show("Fill in properly !");
            }
            else
            {
                try
                {
                    string commString = "INSERT INTO users (username, password, permissions, homedir) VALUES (@val1, @val2, @val3, @val4)";
                    string constring = @"server=xx.xx.xx.xx;user id=user;password=password;persistsecurityinfo=False;database=website;sslmode=None;";
                    string savedPasswordHash = CryptSharp.Crypter.Phpass.Crypt(tbPass.Text, salt);
                    using (MySqlConnection conn = new MySqlConnection(constring))
                    {
                        using (MySqlCommand comm = new MySqlCommand())
                        {
                            comm.Connection = conn;
                            comm.CommandText = commString;
                            comm.Parameters.AddWithValue("@val1", tbUser.Text);
                            comm.Parameters.AddWithValue("@val2", savedPasswordHash);
                            comm.Parameters.AddWithValue("@val3", "rwu");
                            comm.Parameters.AddWithValue("@val4", "/var/www/repository/HOME");
                            conn.Open();
                            comm.ExecuteNonQuery();
                            conn.Close();
                        }
                    }
                    MessageBox.Show("Register OK!");
                    tbPass.Text = null;
                    sqlcon.Close();
                }
                catch
                {
                    MessageBox.Show("Eroare. Contact admin!");
                }
            }
        }
    }
以下是登录部分:

string userLogat = tbUser.Text;
            MySqlConnection sqlcon = new MySqlConnection(@"server=xx.xx.xx.xx;user id=user;password=password;persistsecurityinfo=False;database=website;sslmode=None;");
            string query = "Select * from users Where username= '" + tbUser.Text + "'";
            MySqlDataAdapter sda = new MySqlDataAdapter(query, sqlcon);
            DataTable dtbl = new DataTable();
            sda.Fill(dtbl);
            if (dtbl.Rows.Count == 1)
            {
                string savedPasswordHash = dtbl.Rows[0][3].ToString();

                if (ValidatePassword(tbPass.Text, savedPasswordHash, salt))
                {
                    MessageBox.Show($"Wellcome {tbUser.Text} !");
                    FormMain openMain = new FormMain(userLogat);
                    openMain.Show();
                    this.Hide();
                }
                else
                {
                    MessageBox.Show($"Password for  {userLogat} error.");
                }
            }
            else
            {
                MessageBox.Show($"Username error!");
            }
            sqlcon.Close();
首先通过以下方式实现:

string salt = CryptSharp.Crypter.Phpass.GenerateSalt(8);
通过以下方式检查您的密码:

public static bool ValidatePassword(string pass, string passCriptat, string salt)
    {
        string CryptedInput = CryptSharp.Crypter.Phpass.Crypt(Encoding.ASCII.GetBytes(pass), salt);
        string CryptedPassword = CryptSharp.Crypter.Phpass.Crypt(Encoding.ASCII.GetBytes(passCriptat), salt);
        return string.Equals(CryptedInput, CryptedPassword);
    }

经过多次尝试,我们成功了。以下是解决方案: 登录按钮:

        string userLogat = tbUser.Text;
        MySqlConnection sqlcon = new MySqlConnection(@"server=xx.xx.xx.xx;user id=user;password=password;persistsecurityinfo=False;database=website;sslmode=None;");
        string query = "Select * from users Where username= '" + tbUser.Text + "'";
        MySqlDataAdapter sda = new MySqlDataAdapter(query, sqlcon);
        DataTable dtbl = new DataTable();
        sda.Fill(dtbl);
        if (dtbl.Rows.Count == 1)
        {
            string savedPasswordHash = dtbl.Rows[0][3].ToString();
            if (CryptSharp.Crypter.CheckPassword(tbPass.Text, savedPasswordHash))
            {
                MessageBox.Show($"Wellcome {tbUser.Text} !");
                FormMain openMain = new FormMain(userLogat);
                openMain.Show();
                this.Hide();
            }
            else
            {
                MessageBox.Show($"Parola pentru userul {userLogat} nu exista valida.");
            }
        }
        else
        {
            MessageBox.Show($"Username incorect!");
        }
        sqlcon.Close();
注册部分是:

        MySqlConnection sqlcon = new MySqlConnection(@"server=xx.xx.xx.xx;user id=user;password=password;persistsecurityinfo=False;database=website;sslmode=None;");
        string query = "Select * from users Where username= '" + tbUser.Text + "'";
        MySqlDataAdapter sda = new MySqlDataAdapter(query, sqlcon);
        DataTable dtbl = new DataTable();
        sda.Fill(dtbl);
        if (dtbl.Rows.Count > 0)
        {
            MessageBox.Show("Username exista!");
        }
        else
        {
            if(tbUser.Text == "" | tbPass.Text == ""){
                MessageBox.Show("Completati campurile corespunzator !");
            }
            else
            {
                try
                {
                    string commString = "INSERT INTO users (username, password, permissions, homedir) VALUES (@val1, @val2, @val3, @val4)";
                    string constring = @"server=xx.xx.xx.xx;user id=user;password=password;persistsecurityinfo=False;database=website;sslmode=None;";
                    string savedPasswordHash = CryptSharp.Crypter.Phpass.Crypt(tbPass.Text, salt);

                    using (MySqlConnection conn = new MySqlConnection(constring))
                    {
                        using (MySqlCommand comm = new MySqlCommand())
                        {
                            comm.Connection = conn;
                            comm.CommandText = commString;
                            comm.Parameters.AddWithValue("@val1", tbUser.Text);
                            comm.Parameters.AddWithValue("@val2", savedPasswordHash);
                            comm.Parameters.AddWithValue("@val3", "rwu");
                            comm.Parameters.AddWithValue("@val4", "/var/www/repository/HOME");
                            conn.Open();
                            comm.ExecuteNonQuery();
                            conn.Close();
                        }
                    }
                    MessageBox.Show("Inregistrare reusita!");
                    tbPass.Text = null;
                    sqlcon.Close();
                }
                catch
                {
                    MessageBox.Show("Eroare la inregistrare. Contactati administratorul !");
                }
            }
        }
在初始化之前,我放盐:

string salt = CryptSharp.Crypter.Phpass.GenerateSalt(8);

很乐意帮忙-到目前为止你做了什么?请给我们看一下你的C代码。用C生成的密码在PHP的网站上注册新登录,C应用程序就不工作了。我哪里错了?
string salt = CryptSharp.Crypter.Phpass.GenerateSalt(8);