NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Maros2470
Člen
Avatar
Maros2470:4.7.2016 11:47

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.7.2016 11:47
Avatar
Maros2470
Člen
Avatar
Odpovídá na Maros2470
Maros2470:4.7.2016 11:49

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.7.2016 11:49
Avatar
Odpovídá na Maros2470
Lukáš Křehula:4.7.2016 14:16

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

 
Nahoru Odpovědět
4.7.2016 14:16
Avatar
Odpovídá na Maros2470
Michal Štěpánek:4.7.2016 14:23

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.7.2016 14:25
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
4.7.2016 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:4.7.2016 14:47

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.7.2016 14:47
Avatar
Maros2470
Člen
Avatar
Odpovídá na Maros2470
Maros2470:5.7.2016 9:06

Díky všem.

 
Nahoru Odpovědět
5.7.2016 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.