国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial wordpress密碼生成與登錄密碼驗(yàn)證

wordpress密碼生成與登錄密碼驗(yàn)證

Jul 28, 2016 am 08:28 AM
count gt output this

一。研究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 = &#39;abc&#39;;
 global $wp_hasher;
 if ( empty($wp_hasher) ) {
  require_once( &#39;./wp-includes/class-phpass.php&#39;);
  $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教程有興趣的朋友有所幫助。

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Dec 29, 2023 pm 02:27 PM

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

Fix: Snipping-Tool funktioniert unter Windows 11 nicht Fix: Snipping-Tool funktioniert unter Windows 11 nicht Aug 24, 2023 am 09:48 AM

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

Der Unterschied zwischen counta und count Der Unterschied zwischen counta und count Nov 20, 2023 am 10:01 AM

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.

So beheben Sie den Fehler ?Verbindung zum App Store nicht m?glich' auf dem iPhone So beheben Sie den Fehler ?Verbindung zum App Store nicht m?glich' auf dem iPhone Jul 29, 2023 am 08:22 AM

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è)彈出,該如何解決 Jun 13, 2016 am 10:23 AM

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

Lassen Sie uns darüber sprechen, warum Vue2 dadurch in verschiedenen Optionen auf Eigenschaften zugreifen kann Lassen Sie uns darüber sprechen, warum Vue2 dadurch in verschiedenen Optionen auf Eigenschaften zugreifen kann Dec 08, 2022 pm 08:22 PM

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!

PHP gibt GD-Bild an Browser oder Datei aus PHP gibt GD-Bild an Browser oder Datei aus Mar 21, 2024 am 10:41 AM

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 So optimieren Sie die Akkulaufzeit des iPad mit iPadOS 17.4 Mar 21, 2024 pm 10:31 PM

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

See all articles