Diskuze: Dekódování hesla

C# .NET .NET (C# a Visual Basic) Dekódování hesla American English version English version

Avatar
Maros2470
Člen
Avatar
Maros2470:

Zdravím všechny.
Vytvořil jsem si HashPassword s použitím Salt. Nyní potřebuji toto dekódovat a zobrazit Password. Můžete mi poradit? Díky

/// <summary>
        /// Generating Salt
        /// </summary>
        public String CreateSalt(int size)
        {
            var rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            var buff = new byte[size];
            rng.GetBytes(buff);
            return Convert.ToBase64String(buff);
        }

        /// <summary>
        /// Generating HashPassword
        /// </summary>
        public String GenerateSHA256Hash(String input, String salt)
        {
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input + salt);
            System.Security.Cryptography.SHA256Managed sha256hashstring =
                new System.Security.Cryptography.SHA256Managed();
            byte[] hash = sha256hashstring.ComputeHash(bytes);

            return ByteArrayToHexString(hash);
        }

        /// <summary>
        /// Text editing
        /// </summary>
        public static string ByteArrayToHexString(byte[] bytes)
        {
            return BitConverter.ToString(bytes).Replace("-", "");
        }
 
Odpovědět 4. července 11:47
Avatar
Maros2470
Člen
Avatar
Odpovídá na Maros2470
Maros2470:

Ještě dodatek kódu pro úplnost

/// <summary>
        /// First registration
        /// </summary>
        public void FirstRegistration()
        {
            var user = context.Users.Where(i => i.UserName == this.UserName).FirstOrDefault();


            if (this.Password == this.ConfPassword)
            {

                String salt = CreateSalt(10);
                String hashedpassword = GenerateSHA256Hash(this.Password, salt);

                var _user = new User();
                _user.UserName = UserName;
                _user.HashPassword = hashedpassword;
                _user.Salt = salt;
                _user.Note = Note;
                _user.RoleId = SelectedRole.RoleId;
                Users.Add(_user);
                Save();
                RefreshUser();

                MessageBox.Show("Registrace proběhla v pořádku!");

                LoginPage();
            }

            else
            {
                MessageBox.Show("Neshodné zadání hesla!");

            }
        }
 
Nahoru Odpovědět 4. července 11:49
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na Maros2470
Lukáš Křehula:

Možná si pleteš hashování a šifrování. Z hashe zpátky plain text nezískáš.

 
Nahoru Odpovědět  +1 4. července 14:16
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Z Hashe už to zpátky nejde. Pokud chceš jen kontrolovat správnost hesla, musíš mít uloženo v DB to zahashované heslo a při přihlašování provedeš stejnou proceduru (hashování) a pak jen ty hashe zkontroluješ, jestli se shodují. Zobrazit původní heslo ale nejde...
P.S. Nemyslím si, že při registraci je třeba kontrolovat zadání kontrolního hesla pomocí hashe, zbytečně si to komplikuješ. Stačí porovnat ty zadané řetězce z textboxů

Editováno 4. července 14:25
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 4. července 14:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Maros2470
sadlomaslox25:

a ten salt se musi ukladat do DB taky. pro nejvesti bezpecnost je dobre ukladat si ten salt unikatni pro kazdeho uzivatele.

 
Nahoru Odpovědět 4. července 14:47
Avatar
Maros2470
Člen
Avatar
 
Nahoru Odpovědět 5. července 9:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.