Bu ok?

5 Cevap php

Hey ben bu giriş var do istiyorum

Onlar (rastgele harfler ve sayılar) kayıt zaman benim kullanıcıların her birine özgü tuzları oluşturmak için kullanabilirsiniz. tuzlar colide edeceği şansı ne kadar büyük?

uniqid(mt_rand());

Daha sonra şifre olarak birlikte (bu sırayla) tuz, şifre ve e-posta hash md5 kullanmak ve log-in zaman rehash.

md5($salt . $password . $email);

Bu ne kadar adil md5 daha güvenlidir? I artırabilir bir şey mi?

CREATE TABLE IF NOT EXISTS `users` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(24) CHARACTER SET utf8 NOT NULL,
`password` varchar(32) CHARACTER SET utf8 NOT NULL,
`email` varchar(255) CHARACTER SET utf8 NOT NULL,
`salt` varchar(255) CHARACTER SET utf8 NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `username` (`username`),
 UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

5 Cevap

Ben şifre karma e-posta adresini kullanmak olmaz. Bir kişinin e-posta adresini değiştirir ise karma şifreyi geçersiz kılacak ve böylece kullanıcı kendi şifresini değiştirmek onların e-posta adresini değiştirmek her zaman sahip olurdu. Ben genellikle kullanıcı başına bir tuz ve (tüm kullanıcılar için sabit) uygulama başına bir tuz kullanın. Bu şekilde, bir saldırganın erişmek için uygulama hem erişim ve kullanıcı veritabanı gerekir.

$hashed = md5( $per_user_salt . $password . $app_salt );

Onlar çarpışır eğer önemli değildir. Tuz amacı iki kez ancak farklı tuzları ile aynı değeri karma ise, sonuç different.If saldırganın size sağlamalarının veritabanları Aquires olacağıdır, tuz irade bilinen şifreleri sağlamalarının önceden hesaplanmış veritabanı ile etkisiz saldırı oluşturur. Tuz kendisi bir sır değildir ve tuzların çarpışmalar bir sorun değildir.

getrandmax sizin platforma bağlı olarak, oldukça büyük bir sayı (2147483647) dönmek gibi görünüyor. Eğer herhangi bir N karşılaşma şansı dolayısıyla 1/2147483647 olduğunu.

Eğer N karşılaşma olmadığını şans 1-1/2147483647 olduğunu.

Yani ilk karşılaşma olmadığını şans, ikincisi, üçüncüsü, ... Pth N (1-1/2147483647) ait Pth güç haline gelir.

Yani do P dağıtılmış tuzlarının birini karşılaşma şans 1 - (şans P tuzları herhangi karşılaşmak yok)

= 1 - (1-1/max) ** P

This means a curve going steeply down from about a quarter of a gig salts. (a table from excel):

                        max
                          2,147,483,647
            P = number/salts        ( 1 - 1/max ) ^ P       collission chance
               16777216                    0                   1%
               33554432                    0                   2%
               67108864                    0                   3%
              134217728                    0                   6%
              268435456                    0                  12%
              536870912                    0                  22%
             1073741824                    0                  39%
             2147483648                    0                  63%
             4294967296                    0                  86%
             8589934592                    0                  98%
            17179869184                    0                 100%

Onlar colide asla.

.... Belki bir kez 10000000000000000 içinde.

Ayrıca biz MD5 ile daha fazla patlatır görüyoruz SHA256 kullanmayı düşünebilirsiniz. SHA256 nedeniyle karma sonuçların uzunluğuna ek depolama alanı gerektirir, ama buna değer olduğunu düşünüyorum.

$ = Hash (.. 'Sha256', $ per_user_salt $ parola $ app_salt) karma;

Not: Bu PHP 5.1.2 veya daha yüksek gerektirir.