Lösenord med Bcrypt, MD5, SHA1 eller SHA2 och random Salt

PHPportalen Forum Index » Tips och Trix
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
MixMan



Medlem i: 2903 dagar
Från: Järfälla
Status: Offline



#710487
Inlägg Skrivet: 2011-07-20 00:06      Ämne: Lösenord med Bcrypt, MD5, SHA1 eller SHA2 och random Salt Citera

Här är några funktioner för att generera lösenord med Bcrypt, MD5, SHA1 eller SHA2 och random salt ...samt lite kod för att jämföra original-lösenord med det hashade.
Tips: Skapa ett nytt fält för SHA_password och låt användarens inlogging skapa ett nytt SHA2 lösenord som sparas i det nya fältet. Så småningom kan du byta till SHA2 inloggning, när de flesta aktiva har fått nytt hashat lösen.

PHP:
1:
 
2:
 
3:
<?php
4:
 
5:
// http://phpsec.org/articles/2005/password-hashing.html
6:
 
7:
/****** MD5 128 bit hash with random salt  *******/ 
8:
function genHash_md5($password$salt null)
9:
{
10:
    $salt_length ;
11:
    
12:
    if ($salt === null)
13:
    {
14:
        $salt substr(md5(uniqid(rand(), true)), 0$salt_length);
15:
    }
16:
    else
17:
    {
18:
        $salt substr($salt0$salt_length);
19:
    }
20:
    return $salt md5($password $salt);
21:
}
22:
 
23:
/****** SHA1 160 bit hash with random salt (compatible with PHP Login Script) *******/ 
24:
function genHash_sha160($password$salt null)
25:
{
26:
    $salt_length ;
27:
    
28:
    if ($salt === null)
29:
    {
30:
        $salt substr(md5(uniqid(rand(), true)), 0$salt_length);
31:
    }
32:
    else
33:
    {
34:
        $salt substr($salt0$salt_length);
35:
    }
36:
    return $salt sha1($password $salt);
37:
}
38:
 
39:
/****** SHA2-256 bit hash with random salt *******/    
40:
function genHash_sha256($password$salt null)
41:
    {
42:
        $salt_length ;
43:
        
44:
        if ($salt === null)
45:
        {
46:
            $salt substr(hash('sha256'uniqid(rand(), true)), 0$salt_length) ;
47:
        }
48:
        else
49:
        {
50:
            $salt substr($salt0$salt_length) ;
51:
        }
52:
 
53:
        return $salt hash('sha256'$salt base64_encode($password)) ;
54:
    }
55:
    
56:
/****** SHA2-512 bit hash with random salt *******/ 
57:
function genHash_sha512($password$salt null)
58:
    {
59:
        $salt_length ;
60:
        
61:
        if ($salt === null)
62:
        {
63:
            $salt substr(hash('sha512'uniqid(rand(), true)), 0$salt_length) ;
64:
        }
65:
        else
66:
        {
67:
            $salt substr($salt0$salt_length) ;
68:
        }
69:
 
70:
        return $salt hash('sha512'$salt base64_encode($password)) ;
71:
    }
72:
    
73:
/****** Bcrypt - blowfish hash with random salt *******/    
74:
function genHash_bcrypt($password
75:
  {
76:
     // Kolla om bcrypt är tillgängligt på servern
77:
      if (CRYPT_BLOWFISH != 1) {
78:
        echo 'Bcrypt is NOT supported. Install PHP v5.3 See http://php.net/crypt <br/>';
79:
        //return;
80:
       }
81:
 
82:
      $rounds '13'// the cost of the hash - increase as hardware permits
83:
      
84:
      // generate a random salt
85:
      $salt substr(str_replace('+''.'base64_encode(pack('N4'mt_rand(), mt_rand(), mt_rand(), mt_rand()))), 022);
86:
 
87:
      // build a bcrypt formatted hash
88:
      $hashformat '$2a$'.$rounds.'$'.$salt;
89:
 
90:
      // do the hash
91:
      $hash crypt($password,$hashformat);
92:
      return $hash;
93:
  }
94:
 
95:
function verHash_bcrypt($password$hash
96:
  {
97:
      if(crypt($password,$hash) == $hash
98:
      {
99:
        return $hash;
100:
      } 
101:
      else 
102:
      {
103:
        return false;
104:
      }
105:
  }
106:
/****** Bcrypt  bit hash with random salt *******/   
107:
 
108:
 
109:
// Password Hashing Info
110:
// http://guides.ricehigh.dk/?p=1
111:
 
112:
$password 'hello123' ;  // for testing below ductions with password
113:
echo 'Password: '.$password.'<br>' ;
114:
    echo '<br>' 
115:
 
116:
    $hash_md5 genHash_md5($password) ;
117:
    echo 'Hash-MD5: '.$hash_md5.'<br>' ;
118:
 
119:
    $compare genHash_md5($password$hash_md5) ;
120:
    echo 'Compare-MD5: '.$compare.'<br>' 
121:
    echo '<br>' ;     
122:
        
123:
 
124:
    $hash_sha1 genHash_sha160($password) ;
125:
    echo 'Hash-SHA1: '.$hash_sha1.'<br>' ;
126:
 
127:
    $compare genHash_sha160($password$hash_sha1) ;
128:
    echo 'Compare-SHA1: '.$compare.'<br>' 
129:
    echo '<br>' ;     
130:
 
131:
    $hash_sha256 genHash_sha256($password) ;
132:
    echo 'Hash-SHA256: '.$hash_sha256.'<br>' ;
133:
 
134:
    $compare genHash_sha256($password$hash_sha256) ;
135:
    echo 'Compare-SHA256: '.$compare.'<br>' 
136:
    echo '<br>' 
137:
 
138:
    $hash_sha512 genHash_sha512($password) ;
139:
    echo 'Hash-SHA512: '.$hash_sha512.'<br>' ;
140:
 
141:
    $compare genHash_sha512($password$hash_sha512) ;
142:
    echo 'Compare-SHA512: '.$compare.'<br>' 
143:
    echo '<br>' 
144:
    
145:
    $hash_bcrypt genHash_bcrypt($password);
146:
    echo 'Hash-Bcrypt: '.$hash_bcrypt.'<br>' ;
147:
    
148:
    $compare verHash_bcrypt($password$hash_bcrypt) ;
149:
    echo 'Compare-Bcrypt: '.$compare.'<br>' 
150:
    echo '<br>' ;       
151:
    
152:
?>
153:
 
154:
 


Senast ändrad av MixMan den 2012-03-20 02:07, ändrad totalt 1 gång
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Makkesk8



Medlem i: 2912 dagar
Från: Polen & danmark
Status: Offline



#712037
Inlägg Skrivet: 2011-08-21 19:21      Ämne: Citera

Copy-paste ftw!

bra tips iaf
 

_________________
http://kz-extreme.net/
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida AIM-adress Yahoo Messenger MSN Messenger
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Tips och Trix
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic