PHP ile 2-yollu şifreleme uygulamak için en iyi yolu nedir?

4 Cevap php

PHP içinde bir 2-yollu şifreleme kullanarak sitemde şifreleri şifrelemek istiyorum. Ben mcrypt kütüphaneye rastlamak, ama çok hantal görünüyor. Herkes kolay başka yöntemler biliyorum, ama henüz güvenli? Ben Zend Framework erişimi var, bu yüzden bunu kullanarak bir çözüm de yapardı.

Müvekkilim db içine gidin ve parolayı değiştirmek veya geri almak istiyor, çünkü ben aslında 2-yollu şifreleme gerekir.

4 Cevap

Sen şifreleri karma saklamak (ve properly salted ) gerekmektedir.

There is no excuse in the world that is good enough to break this rule.

Currently, using crypt, with CRYPT_BLOWFISH is the best practice.
CRYPT_BLOWFISH in PHP is an implementation of the Bcrypt hash. Bcrypt is based on the Blowfish block cipher.

  • Müşteri giriş için çalışırsa, girdiğiniz parola hash ve DB saklanan karma karşılaştırın. Onlar maç olmadığını, erişim izni verilir.

  • Müşteriniz şifrenizi değiştirmek istiyorsa, onlar düzgün yeni bir şifre ve DB içine saklar hashes bazı ufak bir programcık, yalak yapmanız gerekir.

  • Müşteriniz bir şifre kurtarmak istiyorsa, yeni bir rastgele şifre oluşturulur ve müşteri gönderilmesi gerekmektedir. Yeni şifre karma DB saklanır

  • Müşterileriniz geçerli şifrenizi aramak istiyorsanız, they are out of luck. Ve bu karma şifre tam nokta: Sistem şifresini bilmiyor, bu yüzden 'baktı' olamaz / çalıntı.

Jeff Bu konuda blogged: You're Probably Storing Passwords Incorrectly

Eğer standart bir kütüphane kullanmak istiyorsanız, size bakmak olabilir: Portable PHP password hashing framework ve CRYPT_BLOWFISH algoritma kullandığınızdan emin olun.

(Generally speaking, messing around with the records in your database directly is asking for trouble.
Many people -including very experienced DB administrators- have found that out the hard way.)

Parolaları şifrelemek etmeyin. Eğer gerçekten onları deşifre etmek gerekiyor asla, sadece onları doğrulamak gerekir. Bir hacker sitenize girdi ve şifrelenmiş parolaları çaldı eğer, muhtemelen aynı zamanda onları şifrelemek için kullanılan anahtar çalmak mümkün olacağından mcrypt kullanarak, hiçbir şey yapmamaktan daha iyi değildir.

Eğer kullanıcının şifresini almak php uygulama için tek bir "şifre" işlevi oluşturmak, bir tuz ile birleştirmek ve sha-256 karma işlevi yoluyla sonuç dizesi çalıştırın ve sonucu döndürür. Eğer bir şifre doğrulamak için ihtiyaç duyarsan, sadece şifre karma veritabanında karma eşleştiğini doğrulamak gerekir.

http://phpsec.org/articles/2005/password-hashing.html

Eğer gerçekten daha sonra şifreleri almak gerektiğinde, en azından öyle bir saldırganın şifreleri şifresini çözmek için (aynı makine üzerinde saklanmamalıdır) özel anahtarı gerekir özel ve kamu tuşları kullanılmalıdır.

Bu hedefi gerçekleştirmek için 2 işlevleri openssl_public_encrypt() and openssl_private_decrypt()

Bu açık olarak saklamak veya şifre (yani geri dönüşümlü değil) bir karma saklar.

Özellikle kodlanmış anahtar ile simetrik şifreleme kullanarak - - Başka bir şey yapıyor temelde anlamsızdır.

Eğer önermek ve makine, şifrelenmiş parolaları, ama aynı kodu ve bunları çözmek için anahtarın değil sadece Saldırgan erişimi tehlikeye edildi, bu yüzden de açık olarak saklanmış olabilir gibi yaparsanız.

Eğer makineye fiziksel erişim elde birine karşı verilerinizi korumak istiyorsanız, şifreli bir dosya sistemi kullanmak (ama yine de veritabanı açık olarak parola saklamak). Tabi ki her reboot, sistem kullanılabilir önce anahtarını elle girmeniz gerekir.