Как включить эту расшифровку в мой код, чтобы перевести хешированный пароль обратно в исходный - PullRequest
1 голос
/ 12 марта 2020

Я создаю веб-сайт с базой данных SQL, связанной с функцией регистрации и входа на веб-сайт. Я хочу иметь sh пароль перед его отправкой в ​​базу данных, что я успешно выполнил, однако мне очень трудно расшифровать хешированный пароль обратно, когда пользователь пытается войти в систему.

вот моя страница входа в систему, где я хочу добавить следующий код ...

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

namespace DogWalkingSite
{
    public partial class userlogin : System.Web.UI.Page
    {
        string strcon = ConfigurationManager.ConnectionStrings["con"].ConnectionString;

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                SqlConnection con = new SqlConnection(strcon);
                //checking to see if the connection is closed
                if (con.State == System.Data.ConnectionState.Closed)
                {
                    //opens state to connect to database
                    con.Open();
                }

                SqlCommand cmd = new SqlCommand("select * from user_master_tbl where user_id= '"+TextBox1.Text.Trim()+ "' and password= '" + TextBox2.Text.Trim() + "'", con);
                SqlDataReader dr = cmd.ExecuteReader();
                //HasRows will become false if the inputs are false
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        Response.Write("<script>" + "alert('"+dr.GetValue(5).ToString()+"');" + "</script>");
                        //sessions used to determine when to show buttons
                        Session["username"] = dr.GetValue(5).ToString();
                        Session["name"] = dr.GetValue(0).ToString();
                        Session["role"] = "user";
                    }

                    Response.Redirect("homepage.aspx");
                }
                else
                {
                    Response.Write("<script>" + "alert('Username does not exist');" + "</script>");
                }

            }
            catch (Exception ex)
            {

            }
        }
    }
} ```




``` public static bool VerifyPassword(string username,

                    string password,AccountDataContext context)

    {

        var user = context.UserAccounts.FirstOrDefault(p => p.UserName == username);

        if (user != null)

        {

            string salt = user.Password.Substring(user.Password.Length - DefaultSaltSize);

            string hashedPassword = CreateHash(password, salt);

            return hashedPassword.Equals(user.Password);

        }

        return false;



    } ```


Ответы [ 3 ]

1 голос
/ 13 марта 2020

На ваш первоначальный вопрос ответили, но я хочу вам помочь.

Это слишком много для комментария, поэтому я просто опубликую его здесь ...

Вместо этого из:

SqlCommand cmd = new SqlCommand("select * from user_master_tbl where user_id= '"+TextBox1.Text.Trim()+ "' and password= '" + TextBox2.Text.Trim() + "'", con);

Сделайте это:

SqlCommand cmd = new SqlCommand("select * from user_master_tbl where user_id = '@user' and password = '@pass'", con);
cmd.Parameters.AddWithValue("@user", TextBox1.Text.Trim());
cmd.Parameters.AddWithValue("@pass", FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text.Trim(), "SHA1"));

Всегда параметрируйте пользовательский ввод, как это. Это защитит вас от SQL инъекционных атак. Плюс, это немного более читабельно, ИМО.

1 голос
/ 12 марта 2020

Когда пользователь регистрируется на сайте, хэширует значение и сохраняет его в БД, а также сравнивает каждый раз, когда пользователь входит в систему, с хэшированным значением.

Расшифровка ха sh невозможна. Потому что ха sh является односторонней функцией. Но вы можете попробовать взломать, используя словарную атаку. ( Радужный стол )

Хмм .. было ли это полезно -_-?

0 голосов
/ 13 марта 2020

Просто добавить что-то, чему меня недавно научили, истинный Пароль Ха sh, нельзя повернуть вспять.

В этом разница между криптографией и хешированием паролей.

Хотя взломать что-то зашифрованное может потребоваться, это можно сделать. Пароль Ha sh является односторонним.

enter image description here

У меня есть пакет Nuget, который обрабатывает оба, вот пример в реальном времени:

DataJuggler.Core.Cryptography. Net Core

DataJuggler. Net .Cryptography. Net Framework

  // Create passwordHash, trying up to 3 times to ensure it can be verified
  passwordHash = CryptographyHelper.GeneratePasswordHash(password, keyCode, 3);

  // Verify Hash
  verified = CryptographyHelper.VerifyHash(password, keyCode, passwordHash);

Поэтому в вашей базе данных хранится пароль ha sh и при взломе значение выглядит следующим образом:

6aerTg31w4wkD2EEKalHtuwzd6n2W8VnrhtN + tozftd + 5ZIk2JXuylL0mZJpR1j1xrObfmbSGzaPeBY2lj + 1027 1028 *

Видео, включая 3D-анимацию, чтобы проиллюстрировать этот момент:

https://youtu.be/w4NrmpeHykE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...