Çince karakterden oluşan şifre sistemi oluşturmak için php kullanma

4 Cevap php

Ben diğer çince karakterler karşı çince karakterleri doğrulayarak, örneğin bir veritabanından veri alır ve get ile kullanıcı girişi alır basit bir şifre komut dosyası oluşturma kulüpler ile bir sorun yaşıyorum.

Ben yaşıyorum sorun, onları echo karakterleri tam olarak aynı olsa da, nedense içindir, benim deyimi hala farklı düşünüyor.

Ben karakterleri kodlamak için htmlentitiesi () işlevini kullanarak denedi, veritabanından şifre bana bir çalışma vererek, güzel kodlar '& # 35441; ' (Ben bir Çin karaktere dönüştürerek onu durdurmak için bunu bir boşluk koyduk!).

Diğer kullanıcı giriş değeri bana komik karakterler bir yük verir. Ben o kırılma gerektiğine inanıyoruz tek şey, o farklı bir şekilde kodlar ve bu nedenle php bu 2 tamamen farklı dizeleri sanıyor olduğunu.

Does anybody have any ideas?
Thanks in advance,
Will

Edit:
Thanks for the quick responses guys, I'm gonna look around setting the database encoding to UTF-8, however at the moment, the results from the database are not the problem, they are encoding correctly using htmlentities, it's the results I get from $_GET which is causing the problems.

Cheers,
Will

4 Cevap

Şifreler için benim tavsiyem size açık parolaları saklamak demektir, çünkü doğrudan bir karşılaştırma yapmak kalmamasıdır. En azından onları saklamadan önce MD5 veya SHA gibi hash (tercihen bir tuz değer yanı) aracılığıyla onları çalıştırın. Sonra sadece genellikle Hex değerleri hash değerleri, karşılaştırmak zorunda, bu nedenle herhangi bir kodlama sorunlara neden olmamalıdır.

Olmayan şifre değerler için veritabanı ve PHP kodlama aynı değil gibi geliyor, bu yüzden doğru uyan değil. MySQL onları istediğiniz şekilde saklanması ise, (yerine ilk değerlerini geri sahip) karşılaştırma yapmak var, bu sorun olabilir gibi görünüyor bir kodlama değişikliği ile geçer 1 kaçınmalısınız.

Eğer şifrelerinizi saklamak istiyorsanız, bu okuyun: what you need to know about secure password schemes.

After reading it, your root problem seem to be some character encoding missmatch between what you receive from the user and what you get from your database. If you are using Mysql and utf-8 encoding, do you first use the SET names "utf-8" query ?

Diğer onu belirtildiği gibi SHA1 ve MD5 kullanarak değerlerini kaydetme sorunu çözebilir. Aynı zamanda, güvenli bir işlemdir. Burada yardım için bir kod parçacığı var.

public function getHashedPassword()
{
    $salt = 'mysalt';
    return  sprintf( "%d%s",$salt,sha1( sprintf( "%d%s", $salt,$this->_rawPassword) ));
}

Karşılaştırmanın sonucunda, şifre giriş anmak ve veritabanında kaydetmek karma şifre karşılaştırın. Aksi kodlama sorunu kaldırabilirsiniz.

Yine yerine parolaları kendilerini daha şifreleri sağlamalarının saklamak gerektiğini, çünkü bu çözümün bir parçası olabilir. Sen karma yerine parolayı depolamak ve böylece veritabanı ile sorunumuz yok.

O dedi, farklı tarayıcılar göndermek dizeleri kodlamak nasıl farklılıklar olabilir. Ben içine çok duyduğum bir şey değil, ama daha iyi tüm tarayıcılarda aynı dizeyi yapan bir çözüm bulmak emin olun. Utf-8 accept-charset ayarlama bir nobrainer, sen de enctype ile karmaşa isteyebilirsiniz.