wordpress密碼生成與登錄密碼驗(yàn)證
Jul 28, 2016 am 08:28 AM一。研究wordpress時(shí)wordpess的密碼密碼生成與登錄密碼驗(yàn)證方式很重要
WordPress密碼已成為整合的首要目標(biāo),如何征服整合,就得了解WordPress密碼算法。
WordPress系統(tǒng)的用戶密碼是保存在wp_users數(shù)據(jù)表的user_pass字段,密碼是通過(guò)Portable PHP password hashing framework類產(chǎn)生的,密碼的形式是隨機(jī)且不可逆,同一個(gè)明文的密碼在不同時(shí)間,產(chǎn)生的密文也不一樣,相對(duì)來(lái)說(shuō)較為安全。
二。密碼生成方式
> 隨機(jī)產(chǎn)生一個(gè)salt 并將salt和password相加
> 進(jìn)行了count次md5 然后和encode64的hash數(shù)值累加
> 最后得到一個(gè)以$P$開(kāi)頭的密碼,這個(gè)密碼每次產(chǎn)生的結(jié)果都不一樣
以下為在wordpress中調(diào)用密碼生成的代碼
<?php $password = 'abc'; global $wp_hasher; if ( empty($wp_hasher) ) { require_once( './wp-includes/class-phpass.php'); $wp_hasher = new PasswordHash(8, TRUE); } echo $wp_hasher->HashPassword($password); ?>
三。wordpress密碼生成與登錄驗(yàn)證
wordpress中位置為\wp-includes\class-phpass.php
以下是wordpress中生成密碼的代碼直接運(yùn)行可查看密碼的生成以及驗(yàn)證過(guò)程
<?php 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 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 compability 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) 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 itoa64[($value >> 6) & 0x3f]; if ($i++ >= $count) break; if ($i itoa64[($value >> 12) & 0x3f]; if ($i++ >= $count) break; $output .= $this->itoa64[($value >> 18) & 0x3f]; } while ($i 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{1}quot;, phpBB3 uses "$H{1}quot; for the same thing if ($id != '$PXXXXX && $id != '$HXXXXX) return $output; $count_log2 = strpos($this->itoa64, $setting[3]); if ($count_log2 30) return $output; $count = 1 = '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 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) { # This one needs to use a different order of characters and a # different encoding scheme from the one in encode64() above. # We care because the last character in our encoded string will # only represent 2 bits. While two known implementations of # bcrypt will happily accept and correct a salt string which # has the 4 unused bits set to non-zero, we do not want to take # chances and we also do not want to waste an additional byte # of entropy. $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $output = '$2aXXXXX; $output .= chr(ord('0') + $this->iteration_count_log2 / 10); $output .= chr(ord('0') + $this->iteration_count_log2 % 10); $output .= 'XXXXX; $i = 0; do { $c1 = ord($input[$i++]); $output .= $itoa64[$c1 >> 2]; $c1 = ($c1 & 0x03) = 16) { $output .= $itoa64[$c1]; break; } $c2 = ord($input[$i++]); $c1 |= $c2 >> 4; $output .= $itoa64[$c1]; $c1 = ($c2 & 0x0f) > 6; $output .= $itoa64[$c1]; $output .= $itoa64[$c2 & 0x3f]; } while (1); return $output; } function HashPassword($password) { $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) get_random_bytes(3); $hash = crypt($password, $this->gensalt_extended($random)); if (strlen($hash) == 20) return $hash; } if (strlen($random) get_random_bytes(6); $hash = $this->crypt_private($password, $this->gensalt_private($random)); if (strlen($hash) == 34) return $hash; # Returning '*' on error is safe here, but would _not_ be safe # in a crypt(3)-like function used _both_ for generating new # hashes and for validating passwords against existing hashes. return '*'; } function CheckPassword($password, $stored_hash) { $hash = $this->crypt_private($password, $stored_hash); if ($hash[0] == '*') $hash = crypt($password, $stored_hash); return $hash == $stored_hash; } } //原始密碼 $passwordValue = "123456"; //生成密碼 $wp_hasher = new PasswordHash(8, TRUE); $sigPassword = $wp_hasher->HashPassword($passwordValue); echo "生成的密碼為:".$sigPassword; echo "\n"; //驗(yàn)證密碼 $data = $wp_hasher->CheckPassword($passwordValue,$sigPassword); if($data){ echo '密碼正確'; }else{ echo '密碼錯(cuò)誤'; } ?>此為一個(gè)wordpres密碼生成與登錄驗(yàn)證實(shí)例,其中HashPassword為生成密碼,CheckPassword為驗(yàn)證密碼
itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 為以上提到的生成salt的基礎(chǔ)字符串。?
備注:由于csdn代碼顯示插件對(duì)特殊字符的限制。 請(qǐng)將以上代碼中 XXXXX替換為?$' ?注意有單引號(hào),代碼中一共有5處
原博客鏈接:http://blog.csdn.net/chengfei112233/article/details/6939144/以上就介紹了 wordpress密碼生成與登錄密碼驗(yàn)證,包括了方面的內(nèi)容,希望對(duì)PHP教程有興趣的朋友有所幫助。

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgeh?use + hochaufl?sende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangeh?use/Keramikgeh?use + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgef?? und Sicherheit hinzugefügt

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verst?ndnis der Grundursache des Problems kann dabei helfen, die richtige L?sung zu finden. Hier sind die h?ufigsten Gründe, warum das Snipping Tool m?glicherweise nicht ordnungsgem?? funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool ge?ffnet wird. Besch?digte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es m?glicherweise besch?digt. Veraltete Grafiktreiber: Inkompatible Treiber k?nnen das Snipping-Tool beeintr?chtigen. St?rungen durch andere Anwendungen: Andere laufende Anwendungen k?nnen mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler w?hrend des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache L?sung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

Mit der Count-Funktion wird die Anzahl der Zahlen in einem angegebenen Bereich gez?hlt. Sie ignoriert Text, logische Werte und Nullwerte, z?hlt jedoch leere Zellen. Die Count-Funktion z?hlt nur die Anzahl der Zellen, die tats?chliche Zahlen enthalten. Die Funktion CountA wird verwendet, um die Anzahl der nicht leeren Zellen in einem angegebenen Bereich zu z?hlen. Es z?hlt nicht nur Zellen, die tats?chliche Zahlen enthalten, sondern auch die Anzahl nicht leerer Zellen, die Text, logische Werte und Formeln enthalten.

Teil 1: Erste Schritte zur Fehlerbehebung überprüfen des Apple-Systemstatus: Bevor wir uns mit komplexen L?sungen befassen, beginnen wir mit den Grundlagen. Das Problem liegt m?glicherweise nicht an Ihrem Ger?t; die Server von Apple sind m?glicherweise ausgefallen. Besuchen Sie die Systemstatusseite von Apple, um zu sehen, ob der AppStore ordnungsgem?? funktioniert. Wenn es ein Problem gibt, k?nnen Sie nur warten, bis Apple es behebt. überprüfen Sie Ihre Internetverbindung: Stellen Sie sicher, dass Sie über eine stabile Internetverbindung verfügen, da das Problem ?Verbindung zum AppStore nicht m?glich“ manchmal auf eine schlechte Verbindung zurückzuführen ist. Versuchen Sie, zwischen WLAN und mobilen Daten zu wechseln oder die Netzwerkeinstellungen zurückzusetzen (Allgemein > Zurücksetzen > Netzwerkeinstellungen zurücksetzen > Einstellungen). Aktualisieren Sie Ihre iOS-Version:

php提交表單通過(guò)后,彈出的對(duì)話框怎樣在當(dāng)前頁(yè)彈出php提交表單通過(guò)后,彈出的對(duì)話框怎樣在當(dāng)前頁(yè)彈出而不是在空白頁(yè)彈出?想實(shí)現(xiàn)這樣的效果:而不是空白頁(yè)彈出:------解決方案--------------------如果你的驗(yàn)證用PHP在后端,那么就用Ajax;僅供參考:HTML code

Dieser Artikel hilft Ihnen bei der Interpretation des Vue-Quellcodes und stellt vor, warum Sie damit in Vue2 auf Eigenschaften in verschiedenen Optionen zugreifen k?nnen. Ich hoffe, dass er für alle hilfreich ist!

In diesem Artikel wird ausführlich erl?utert, wie PHP GD-Bilder in einen Browser oder eine Datei ausgibt. Der Herausgeber h?lt dies für recht praktisch, daher teile ich es Ihnen als Referenz mit und hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen k?nnen. PHP gibt GD-Bilder an einen Browser oder eine Datei aus. Einführung Die phpGD-Bibliothek bietet leistungsstarke Funktionen zur Bildverarbeitung, mit denen Sie Bilder erstellen, bearbeiten und ausgeben k?nnen. Bilder k?nnen zur Anzeige oder Weiterverarbeitung in einen Browser oder eine Datei ausgegeben werden. Ausgabe an den Browser Um ein Bild an einen Browser auszugeben, führen Sie die folgenden Schritte aus: Erstellen Sie eine Bildressource: Verwenden Sie die Funktion imagecreate(), um eine Bildressource zu erstellen. Bilddaten laden: imagepng(), imagejpeg() oder imagegif() verwenden

So optimieren Sie die Akkulaufzeit des iPad mit iPadOS 17.4 Die Verl?ngerung der Akkulaufzeit ist der Schlüssel zum mobilen Ger?teerlebnis, und das iPad ist ein gutes Beispiel. Wenn Sie das Gefühl haben, dass der Akku Ihres iPads zu schnell leer wird, machen Sie sich keine Sorgen, es gibt eine Reihe von Tricks und Optimierungen in iPadOS 17.4, die die Laufzeit Ihres Ger?ts deutlich verl?ngern k?nnen. Das Ziel dieses ausführlichen Leitfadens besteht nicht nur darin, Informationen bereitzustellen, sondern auch darin, die Art und Weise zu ?ndern, wie Sie Ihr iPad verwenden, Ihr gesamtes Batteriemanagement zu verbessern und sicherzustellen, dass Sie sich l?nger auf Ihr Ger?t verlassen k?nnen, ohne es aufladen zu müssen. Durch die übernahme der hier beschriebenen Vorgehensweisen machen Sie einen Schritt hin zu einem effizienteren und bewussteren Einsatz von Technologie, der auf Ihre individuellen Bedürfnisse und Nutzungsmuster zugeschnitten ist. Identifizieren Sie die gr??ten Energieverbraucher
