• 17-04-2024, 20:13:50
    #1
    Merhaba, wordpressden başka bir yazılıma geçeceğim. Üyeleride geçireceğim için wordpressde bulunan hashleri geçeceğim scripte uygun hale getireceğim. Aşağıda ki hash wordpresse ait internette baktığımda md5 diyor ama değil gibi nasıl şifrelenmiş bu?

    (Örneği tam yazmadım bazı karakterleri eksik)
    ÖRN: $P$Bm/rzHHT4IeiAY2eDcyUW
  • 17-04-2024, 20:17:51
    #2
    https://stackoverflow.com/questions/...-wordpress-use

    PHP'nin password_hash() fonksiyonu ile bcrypt kullanarak şifreliyormuş.

    wp-includes/class-phpass.php dosyasında yer almaktadır.
  • 17-04-2024, 20:24:03
    #3
    veritabanında md5 olarak değiştirilip girilebiliyordu güncelleme almadıysa bi dene istersen
  • 17-04-2024, 20:25:37
    #4
    mhcifci adlı üyeden alıntı: mesajı görüntüle
    veritabanında md5 olarak değiştirilip girilebiliyordu güncelleme almadıysa bi dene istersen
    yok hocam taşıma yapacağım için işime yaramaz. Örneğin şuanda bu hash türü ile kayıtlı, hangi hash ile şifrelenmişse yeni scripttede giriş yapan kullanıcının girdiği şifreyi hashleyip wordpressde bulunan hash ile karşılaştıracağım giriş yaptıracağım ama çözemedim wordpresste ki hash türünü
  • 17-04-2024, 20:33:22
    #5
    umiT adlı üyeden alıntı: mesajı görüntüle
    https://stackoverflow.com/questions/...-wordpress-use

    PHP'nin password_hash() fonksiyonu ile bcrypt kullanarak şifreliyormuş.

    wp-includes/class-phpass.php dosyasında yer almaktadır.
    attığınız linkten inceleyip buldum teşekkürler, ihtiyacı olanlar için kısaca anlatayım vakit harcamayın.

    bu kodu php dosyanıza ekleyin
    class PasswordHash {
        var $itoa64;
        var $iteration_count_log2;
        var $portable_hashes;
        var $random_state;
    
        function PasswordHash($iteration_count_log2, $portable_hashes){
            $this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    
            if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31)
                $iteration_count_log2 = 8;
            $this->iteration_count_log2 = $iteration_count_log2;
    
            $this->portable_hashes = $portable_hashes;
    
            $this->random_state = microtime() . uniqid(rand(), TRUE); // removed getmypid() for compatibility reasons
        }
    
        function get_random_bytes($count){
            $output = '';
            if ( @is_readable('/dev/urandom') &&
                ($fh = @fopen('/dev/urandom', 'rb'))) {
                $output = fread($fh, $count);
                fclose($fh);
            }
    
            if (strlen($output) < $count) {
                $output = '';
                for ($i = 0; $i < $count; $i += 16) {
                    $this->random_state =
                        md5(microtime() . $this->random_state);
                    $output .=
                        pack('H*', md5($this->random_state));
                }
                $output = substr($output, 0, $count);
            }
    
            return $output;
        }
    
        function encode64($input, $count){
            $output = '';
            $i = 0;
            do {
                $value = ord($input[$i++]);
                $output .= $this->itoa64[$value & 0x3f];
                if ($i < $count)
                    $value |= ord($input[$i]) << 8;
                $output .= $this->itoa64[($value >> 6) & 0x3f];
                if ($i++ >= $count)
                    break;
                if ($i < $count)
                    $value |= ord($input[$i]) << 16;
                $output .= $this->itoa64[($value >> 12) & 0x3f];
                if ($i++ >= $count)
                    break;
                $output .= $this->itoa64[($value >> 18) & 0x3f];
            } while ($i < $count);
    
            return $output;
        }
    
        function gensalt_private($input){
            $output = '$P$';
            $output .= $this->itoa64[min($this->iteration_count_log2 +
                ((PHP_VERSION >= '5') ? 5 : 3), 30)];
            $output .= $this->encode64($input, 6);
    
            return $output;
        }
    
        function crypt_private($password, $setting){        
            $output = '*0';
            if (substr($setting, 0, 2) == $output)
                $output = '*1';
    
            $id = substr($setting, 0, 3);
            # We use "$P$", phpBB3 uses "$H$" for the same thing
            if ($id != '$P$' && $id != '$H$')
                return $output;
    
            $count_log2 = strpos($this->itoa64, $setting[3]);
            if ($count_log2 < 7 || $count_log2 > 30)
                return $output;
    
            $count = 1 << $count_log2;
    
            $salt = substr($setting, 4, 8);
            if (strlen($salt) != 8)
                return $output;
    
            if (PHP_VERSION >= '5') {
                $hash = md5($salt . $password, TRUE);
                do {
                    $hash = md5($hash . $password, TRUE);
                } while (--$count);
            } else {
                $hash = pack('H*', md5($salt . $password));
                do {
                    $hash = pack('H*', md5($hash . $password));
                } while (--$count);
            }
    
            $output = substr($setting, 0, 12);
            $output .= $this->encode64($hash, 16);
    
            return $output;
        }
    
        function gensalt_extended($input){
            $count_log2 = min($this->iteration_count_log2 + 8, 24);
            # This should be odd to not reveal weak DES keys, and the
            # maximum valid value is (2**24 - 1) which is odd anyway.
            $count = (1 << $count_log2) - 1;
    
            $output = '_';
            $output .= $this->itoa64[$count & 0x3f];
            $output .= $this->itoa64[($count >> 6) & 0x3f];
            $output .= $this->itoa64[($count >> 12) & 0x3f];
            $output .= $this->itoa64[($count >> 18) & 0x3f];
    
            $output .= $this->encode64($input, 3);
    
            return $output;
        }
    
        function gensalt_blowfish($input){
            $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    
            $output = '$2a$';
            $output .= chr(ord('0') + $this->iteration_count_log2 / 10);
            $output .= chr(ord('0') + $this->iteration_count_log2 % 10);
            $output .= '$';
    
            $i = 0;
            do {
                $c1 = ord($input[$i++]);
                $output .= $itoa64[$c1 >> 2];
                $c1 = ($c1 & 0x03) << 4;
                if ($i >= 16) {
                    $output .= $itoa64[$c1];
                    break;
                }
    
                $c2 = ord($input[$i++]);
                $c1 |= $c2 >> 4;
                $output .= $itoa64[$c1];
                $c1 = ($c2 & 0x0f) << 2;
    
                $c2 = ord($input[$i++]);
                $c1 |= $c2 >> 6;
                $output .= $itoa64[$c1];
                $output .= $itoa64[$c2 & 0x3f];
            } while (1);
    
            return $output;
        }
    
        function HashPassword($password){
            if ( strlen( $password ) > 4096 ) {
                return '*';
            }
    
            $random = '';
    
            if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) {
                $random = $this->get_random_bytes(16);
                $hash =
                    crypt($password, $this->gensalt_blowfish($random));
                if (strlen($hash) == 60)
                    return $hash;
            }
    
            if (CRYPT_EXT_DES == 1 && !$this->portable_hashes) {
                if (strlen($random) < 3)
                    $random = $this->get_random_bytes(3);
                $hash =
                    crypt($password, $this->gensalt_extended($random));
                if (strlen($hash) == 20)
                    return $hash;
            }
    
            if (strlen($random) < 6)
                $random = $this->get_random_bytes(6);
            $hash =
                $this->crypt_private($password,
                $this->gensalt_private($random));
            if (strlen($hash) == 34)
                return $hash;
    
            return '*';
        }
    
        function CheckPassword($password, $stored_hash){
            if ( strlen( $password ) > 4096 ) {
                return false;
            }
    
            $hash = $this->crypt_private($password, $stored_hash);
            if ($hash[0] == '*')
                $hash = crypt($password, $stored_hash);
    
            return $hash === $stored_hash;
        }
    }
    bu kodla şifre oluşturup veritabanına kaydedebilirsiniz.
    $wp_hasher = new PasswordHash(8, true);
    $pass = $wp_hasher->HashPassword( trim( "ŞİFRE" ) );
    bu kodla da girilen şifre ile veritabanında bulunan hash eşleşiyor mu kontrol için
    $password_hashed = '$P$BS/Xm5k6p0EeT93gqwT2PBK/Z3vjL60'; // veritabanında ki hash
    $plain_password = 'test'; // eşleştirilecek şifre
    
    if($wp_hasher->CheckPassword($plain_password, $password_hashed)) {
        echo "YES, Matched";
    } else {
        echo "No, Wrong Password";
    }