国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

java做網(wǎng)站步驟網(wǎng)推

java做網(wǎng)站步驟,網(wǎng)推,自己做網(wǎng)站的二維碼,福田歐曼一 對(duì)稱加密 1.1 openssl 1.1.1 openssl_get_cipher_methods(bool $aliases false) 獲取可用的加密算法。包含可用加密算法的array。 請(qǐng)注意:在 OpenSSL 1.1.1 版本之前,返回加密算法的拼法大小寫都有; 從 OpenSSL 1.1.1 開(kāi)始&#xff0c…

一 對(duì)稱加密

1.1 openssl

1.1.1 openssl_get_cipher_methods(bool $aliases = false)

獲取可用的加密算法。包含可用加密算法的array。 請(qǐng)注意:在 OpenSSL 1.1.1 版本之前,返回加密算法的拼法大小寫都有; 從 OpenSSL 1.1.1 開(kāi)始,統(tǒng)一只返回小寫的形式。

aliases 如果密碼別名應(yīng)該包含在返回的array中,則設(shè)置為 true.

openssl版本查詢

php --re openssl | grep version
Extension [ <persistent> extension #4 openssl version 7.4.30 ] {
    $ciphers = openssl_get_cipher_methods();$ciphers1 = array_filter($ciphers,function ($value) {return str_starts_with($value, "aes") === TRUE;});var_dump($ciphers1);$ciphers_and_aliases = openssl_get_cipher_methods(true);$ciphers2 = array_filter($ciphers_and_aliases,function ($value) {return strpos($value, "bf") !== FALSE;});var_dump($ciphers2);

?測(cè)試結(jié)果

array(36) {[0]=>string(11) "aes-128-cbc"[1]=>string(21) "aes-128-cbc-hmac-sha1"[2]=>string(23) "aes-128-cbc-hmac-sha256"[3]=>string(11) "aes-128-ccm"[4]=>string(11) "aes-128-cfb"[5]=>string(12) "aes-128-cfb1"[6]=>string(12) "aes-128-cfb8"[7]=>string(11) "aes-128-ctr"[8]=>string(11) "aes-128-ecb"[9]=>string(11) "aes-128-gcm"[10]=>string(11) "aes-128-ocb"[11]=>string(11) "aes-128-ofb"[12]=>string(11) "aes-128-xts"[13]=>string(11) "aes-192-cbc"[14]=>string(11) "aes-192-ccm"[15]=>string(11) "aes-192-cfb"[16]=>string(12) "aes-192-cfb1"[17]=>string(12) "aes-192-cfb8"[18]=>string(11) "aes-192-ctr"[19]=>string(11) "aes-192-ecb"[20]=>string(11) "aes-192-gcm"[21]=>string(11) "aes-192-ocb"[22]=>string(11) "aes-192-ofb"[23]=>string(11) "aes-256-cbc"[24]=>string(21) "aes-256-cbc-hmac-sha1"[25]=>string(23) "aes-256-cbc-hmac-sha256"[26]=>string(11) "aes-256-ccm"[27]=>string(11) "aes-256-cfb"[28]=>string(12) "aes-256-cfb1"[29]=>string(12) "aes-256-cfb8"[30]=>string(11) "aes-256-ctr"[31]=>string(11) "aes-256-ecb"[32]=>string(11) "aes-256-gcm"[33]=>string(11) "aes-256-ocb"[34]=>string(11) "aes-256-ofb"[35]=>string(11) "aes-256-xts"
}
array(5) {[72]=>string(2) "bf"[73]=>string(6) "bf-cbc"[74]=>string(6) "bf-cfb"[75]=>string(6) "bf-ecb"[76]=>string(6) "bf-ofb"
}

1.1.2 openssl_cipher_iv_length(string $cipher_algo)

獲取密碼iv長(zhǎng)度。成功返回true,失敗返回false。

cipher_algo 加密方法,值范圍在openssl_get_cipher_methods()之內(nèi)。當(dāng)密碼方法未知時(shí),拋出一個(gè)E_WARNING 級(jí)的錯(cuò)誤。

1.1.3 openssl_random_pseudo_bytes(int $length, bool &$strong_result = null)

生成一個(gè)偽隨機(jī)字節(jié)串,字節(jié)數(shù)由 length 參數(shù)指定。

length 所需字符串長(zhǎng)度。

strong_result 是否使用強(qiáng)加密。

1.1.4 openssl_encrypt()

以指定的方式和 key 加密數(shù)據(jù),返回原始或 base64 編碼后的字符串。返回字符串或布爾值。

參數(shù)列表

  1. $data 待加密明文數(shù)據(jù)
  2. $cipher_algo 加密學(xué)方式。openssl_get_cipher_methods()中內(nèi)容。
  3. $passphrase 口令。若 passphrase 比預(yù)期長(zhǎng)度短,將靜默用 NUL 填充; 若比預(yù)期長(zhǎng)度更長(zhǎng),將靜默截?cái)唷?/li>
  4. $options 值可為OPENSSL_RAW_DATA 、 OPENSSL_ZERO_PADDING,根據(jù)標(biāo)記按位或。options默認(rèn)為0。
  5. $iv 非 NULL 的初始化向量。 默認(rèn)為""。
  6. &$tag 使用 AEAD 密碼模式(GCM 或 CCM)時(shí)傳引用的驗(yàn)證標(biāo)簽。默認(rèn)為NULL。
  7. $aad 附加的驗(yàn)證數(shù)據(jù)。 默認(rèn)為""。
  8. $tag_length 驗(yàn)證 tag 的長(zhǎng)度。GCM 模式時(shí),它的范圍是 4 到 16。默認(rèn)16。

沒(méi)查到OPENSSL_RAW_DATA 、 OPENSSL_ZERO_PADDING對(duì)應(yīng)信息,測(cè)試結(jié)果 OPENSSL_RAW_DATA=1,OPENSSL_ZERO_PADDING=2。

var_dump(OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING);#測(cè)試結(jié)果
int(1)
int(2)

1.1.5 openssl_decrypt()

采用原始或base64編碼的字符串,并使用給定的方法和密鑰對(duì)其進(jìn)行解密。

參數(shù)中沒(méi)有$tag_length,其余參數(shù)順序和說(shuō)明與openssl_encrypt()相同。

    $plaintext = "message to be encrypted";$aad = time();$passphrase = "lsswear" . $aad;$options = 0;$cipher = "aes-128-gcm";if (in_array($cipher, openssl_get_cipher_methods())) {$ivlen = openssl_cipher_iv_length($cipher);var_dump($ivlen);$iv = openssl_random_pseudo_bytes($ivlen, $strong_result);var_dump($iv, $strong_result);$ciphertext = openssl_encrypt($plaintext, $cipher, $passphrase, $options, $iv, $tag, $aad, 10);var_dump($ciphertext, $tag);$original_plaintext = openssl_decrypt($ciphertext, $cipher, $passphrase, $options, $iv, $tag, $aad);var_dump($original_plaintext);}

測(cè)試結(jié)果

string(12) "Rv}]"
bool(true)
string(32) "8YzjMXJ3bQBLEpEyPtS/Dgx4Y2tB8Ks="
string(10) "?L J"
string(23) "message to be encrypted"

1.2 base64

1.2.1 base64_encode(string $string)

使用 MIME base64 對(duì)數(shù)據(jù)進(jìn)行編碼。string為需加密的明文。返回字符串。

1.2.2 base64_decode(string $string, bool $strict = false)

對(duì)使用 MIME base64 編碼的數(shù)據(jù)進(jìn)行解碼。

string 加密過(guò)的字符串

strict 為true 時(shí),一旦輸入的數(shù)據(jù)超出了 base64 字母表,將返回 false。 否則會(huì)靜默丟棄無(wú)效的字符。

 $plaintext = "message to be encrypted €";$str = base64_encode($plaintext);var_dump($str);$str2 = base64_decode($str);var_dump($str2);#測(cè)試結(jié)果
string(36) "bWVzc2FnZSB0byBiZSBlbmNyeXB0ZWQg4oKs"
string(27) "message to be encrypted €"

1.3 url

1.3.1 urlencode(string $string)

編碼 URL 字符串。返回字符串。

1.3.2 urldecode()

解碼已編碼的 URL 字符串。返回解碼后的字符串。

1.4 html碼轉(zhuǎn)義

可以處理防止注入。

1.4.1 htmlentities()

將字符轉(zhuǎn)換為 HTML 轉(zhuǎn)義字符。返回編碼后的字符。

參數(shù)列表

  1. $string 需轉(zhuǎn)義字符。
  2. $flags int類型。掩碼標(biāo)記。用于設(shè)置如何處理引號(hào)、無(wú)效代碼序列、使用文檔的類型。默認(rèn)是 ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401。
  3. $encoding 字符串類型。定義轉(zhuǎn)換字符時(shí)使用的編碼。默認(rèn)為default_charset配置選項(xiàng)的值。如果default_charset配置選項(xiàng)可能對(duì)給定的輸入設(shè)置不正確,則強(qiáng)烈建議您為代碼指定正確的值
  4. $double_encode 布爾值,默認(rèn)true。為false時(shí)不會(huì)轉(zhuǎn)換現(xiàn)有的 HTML 實(shí)體, 默認(rèn)是全部轉(zhuǎn)換。

flags 可用標(biāo)記

常量名描述
ENT_COMPAT會(huì)轉(zhuǎn)換雙引號(hào),不轉(zhuǎn)換單引號(hào)。
ENT_QUOTES既轉(zhuǎn)換雙引號(hào)也轉(zhuǎn)換單引號(hào)。
ENT_NOQUOTES單/雙引號(hào)都不轉(zhuǎn)換
ENT_IGNORE靜默丟棄無(wú)效的代碼單元序列,而不是返回空字符串。 不建議使用此標(biāo)記, 因?yàn)樗??可能有安全影響。
ENT_SUBSTITUTE替換無(wú)效的代碼單元序列為 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 &#xFFFD; (其他),而不是返回空字符串。
ENT_DISALLOWED為文檔的無(wú)效代碼點(diǎn)替換為 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 &#xFFFD;(其他),而不是把它們留在原處。 比如以下情況下就很有用:要保證 XML 文檔嵌入額外內(nèi)容時(shí)格式合法。
ENT_HTML401以 HTML 4.01 處理代碼。
ENT_XML1以 XML 1 處理代碼。
ENT_XHTML以 XHTML 處理代碼。
ENT_HTML5以 HTML 5 處理代碼。

encoding 字符集列表

字符集別名描述
ISO-8859-1ISO8859-1西歐,Latin-1
ISO-8859-5ISO8859-5Little used cyrillic charset (Latin/Cyrillic).
ISO-8859-15ISO8859-15西歐,Latin-9。增加歐元符號(hào),法語(yǔ)和芬蘭語(yǔ)字母在 Latin-1(ISO-8859-1) 中缺失。
UTF-8ASCII 兼容的多字節(jié) 8 位 Unicode。
cp866ibm866, 866DOS 特有的西里爾編碼。本字符集在 4.3.2 版本中得到支持。
cp1251Windows-1251, win-1251, 1251Windows 特有的西里爾編碼。本字符集在 4.3.2 版本中得到支持。
cp1252Windows-1252, 1252Windows 特有的西歐編碼。
KOI8-Rkoi8-ru, koi8r俄語(yǔ)。本字符集在 4.3.2 版本中得到支持。
BIG5950繁體中文,主要用于中國(guó)臺(tái)灣省。
GB2312936簡(jiǎn)體中文,中國(guó)國(guó)家標(biāo)準(zhǔn)字符集。
BIG5-HKSCS繁體中文,附帶香港擴(kuò)展的 Big5 字符集。
Shift_JISSJIS, 932日語(yǔ)
EUC-JPEUCJP日語(yǔ)
MacRomanMac OS 使用的字符串。
''空字符串激活從腳本編碼(Zend多字節(jié))、default_charset和當(dāng)前語(yǔ)言環(huán)境(參見(jiàn)nl_langinfo()和setlocale())中按此順序進(jìn)行檢測(cè)。不推薦。

1.4.2 html_entity_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ?string $encoding = null)

HTML 轉(zhuǎn)義字符解碼。參數(shù)意義和htmlentities()相同。返回解碼后的字符串

    $url = "https://mp.csdn.net/mp_blog/creation/editor/135825528";$str1 = urlencode($url);var_dump($str1);$str2 = urldecode($str1);var_dump($str2);$html = "<b>測(cè)試:<href src='" . $str1 . "'></b>";var_dump($html);$flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5;$encoding = "cp866";$hstr1 = htmlentities($html, $flags, $encoding, false);var_dump($hstr1);$hstr2 = html_entity_decode($hstr1, $flags, $encoding);var_dump($hstr2);$hstr3 = htmlentities($html, $flags, $encoding);var_dump($hstr3);

測(cè)試結(jié)果

string(67) "https%3A%2F%2Fmp.csdn.net%2Fmp_blog%2Fcreation%2Feditor%2F135825528"
string(53) "https://mp.csdn.net/mp_blog/creation/editor/135825528"
string(96) "<b>測(cè)試:<href src='https%3A%2F%2Fmp.csdn.net%2Fmp_blog%2Fcreation%2Feditor%2F135825528'></b>"
string(252) "&lt;b&gt;&tscy;&boxvL;&Lcy;&shcy;&pcy;&KHcy;&yacy;&boxUL;&HARDcy;&lt;href src&equals;&apos;https&percnt;3A&percnt;2F&percnt;2Fmp&period;csdn&period;net&percnt;2Fmp&lowbar;blog&percnt;2Fcreation&percnt;2Feditor&percnt;2F135825528&apos;&gt;&lt;&sol;b&gt;"
string(96) "<b>測(cè)試:<href src='https%3A%2F%2Fmp.csdn.net%2Fmp_blog%2Fcreation%2Feditor%2F135825528'></b>"
string(252) "&lt;b&gt;&tscy;&boxvL;&Lcy;&shcy;&pcy;&KHcy;&yacy;&boxUL;&HARDcy;&lt;href src&equals;&apos;https&percnt;3A&percnt;2F&percnt;2Fmp&period;csdn&period;net&percnt;2Fmp&lowbar;blog&percnt;2Fcreation&percnt;2Feditor&percnt;2F135825528&apos;&gt;&lt;&sol;b&gt;"

?經(jīng)測(cè)試發(fā)現(xiàn)$double_encode的值對(duì)轉(zhuǎn)義結(jié)果好像沒(méi)有影響。

二 非對(duì)稱加密

hash加密之后再寫一篇文章。sha1已不再推薦使用。

2.1 openssl

openssl也有對(duì)如公鑰私鑰的使用。之后單寫一篇文章。公鑰、私鑰、簽名,實(shí)際使用流程可參考微信支付簽名。

2.1.1 openssl_sign()

生成簽名。成功時(shí)返回 true, 或者在失敗時(shí)返回 false。

參數(shù)列表

  1. $sign 待加密明文。
  2. &$signature 加密后的字符串。
  3. $private_key 用戶私鑰??伤泐愋蚈penSSLAsymmetricKey|OpenSSLCertificate|array|string。
  4. $algorithm 算法。 可以傳int值或字符串。int值在Signature Algorithms中。字符串為openssl_get_md_methods()返回?cái)?shù)組中的值。

$algorithm 可用int值:

  • OPENSSL_ALGO_DSS1 php8可能不支持
  • OPENSSL_ALGO_SHA1=>1? openssl_sign() 和 openssl_verify() 函數(shù)使用的默認(rèn)算法。
  • OPENSSL_ALGO_SHA224=>6
  • OPENSSL_ALGO_SHA256=>7
  • OPENSSL_ALGO_SHA384=>8
  • OPENSSL_ALGO_SHA512=>9
  • OPENSSL_ALGO_RMD160=>10
  • OPENSSL_ALGO_MD5=>2
  • OPENSSL_ALGO_MD4=>3
  • OPENSSL_ALGO_MD2 可能php8不支持

2.1.2 openssl_verify()

驗(yàn)證簽名。如果簽名正確返回 1,簽名錯(cuò)誤返回 0,錯(cuò)誤時(shí)返回 -1 或 false。

?參數(shù)列表

  1. $data 簽名。
  2. &$signature 原始二進(jìn)制字符串,通過(guò) openssl_sign() 或類似的函數(shù)生成
  3. $public_key 用戶公鑰??伤泐愋蚈penSSLAsymmetricKey|OpenSSLCertificate|array|string。
  4. $algorithm 算法。 可以傳int值或字符串。int值在Signature Algorithms中。字符串為openssl_get_md_methods()返回?cái)?shù)組中的值。

2.1.3 openssl_pkey_get_private()

獲取私鑰。成功時(shí)現(xiàn)在返回 OpenSSLAsymmetricKey 實(shí)例,失敗時(shí)返回 false。

參數(shù)列表:

  1. private_key 私鑰文件路徑或私鑰字符串,pem格式。
  2. passphrase 如果指定的密鑰已被加密了(受密碼保護(hù)),可選參數(shù) passphrase 是必須要的。默認(rèn)null。

2.1.4 openssl_pkey_get_public($public_key)

從證書(shū)中解析公鑰。成功時(shí)返回 OpenSSLAsymmetricKey 實(shí)例,錯(cuò)誤時(shí)返回 false

$public_key為PEM 格式的公鑰,可用字段類型OpenSSLAsymmetricKey|OpenSSLCertificate|array|string。

字符串:pem證書(shū)文件路徑,或?qū)?yīng)密鑰。

對(duì)象:OpenSSLAsymmetricKey|OpenSSLCertificate實(shí)例。

2.1.5 openssl_pkey_new(?array $options = null)

必須安裝有效的 openssl.cnf 以保證此函數(shù)正確運(yùn)行,即系統(tǒng)又openssl擴(kuò)展,則該函數(shù)可使用。

一般Linux系統(tǒng)里都有,windows需要自己安裝。

linux下載地址:[ Downloads ] - /source/index.html

windows下載地址:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

options參數(shù)列表

options類型等同于 openssl.conf描述
digest_algstringdefault_md摘要算法或簽名哈希算法,通常是 openssl_get_md_methods() 之一。
x509_extensionsstringx509_extensions選擇在創(chuàng)建 x509 證書(shū)時(shí)應(yīng)該使用哪些擴(kuò)展
req_extensionsstringreq_extensions創(chuàng)建 CSR 時(shí),選擇使用哪個(gè)擴(kuò)展
private_key_bitsintdefault_bits指定應(yīng)該使用多少位來(lái)生成私鑰
private_key_typeintnone選擇在創(chuàng)建 CSR 時(shí)應(yīng)該使用哪些擴(kuò)展??蛇x值有 OPENSSL_KEYTYPE_DSA、 OPENSSL_KEYTYPE_DHOPENSSL_KEYTYPE_RSAOPENSSL_KEYTYPE_EC。 默認(rèn)值是 OPENSSL_KEYTYPE_RSA。
encrypt_keyboolencrypt_key是否應(yīng)該對(duì)導(dǎo)出的密鑰(帶有密碼短語(yǔ))進(jìn)行加密?
encrypt_key_cipherintnonecipher constants 常量之一。
curve_namestringnoneopenssl_get_curve_names() 之一。
configstringN/A自定義 openssl.conf 文件的路徑。

?ciopher常量:

  • OPENSSL_CIPHER_RC2_40=>0
  • OPENSSL_CIPHER_RC2_128=>1
  • OPENSSL_CIPHER_RC2_64=>2
  • OPENSSL_CIPHER_DES=>3
  • OPENSSL_CIPHER_3DES=>4
  • OPENSSL_CIPHER_AES_128_CBC=>5
  • OPENSSL_CIPHER_AES_192_CBC=>6
  • OPENSSL_CIPHER_AES_256_CBC=>7

2.1.6 openssl_get_curve_names()

獲得ECC的可用曲線名稱列表。有效曲線名稱的 array, 或者在失敗時(shí)返回 false

獲取用于公鑰/私鑰操作的橢圓曲線密碼(ECC)中可用曲線名稱的列表。兩個(gè)最廣泛的標(biāo)準(zhǔn)化/支持的曲線是 prime256v1(NIST P-256)和 secp384r1(NIST P-384)。

2.1.6 openssl_pkey_export()

key 當(dāng)作 PEM 編碼字符串導(dǎo)出并且將之保存到output (通過(guò)引用傳遞的)中。成功時(shí)返回 true, 或者在失敗時(shí)返回 false。必須有openssl擴(kuò)展。

參數(shù)列表:

  1. $key pem證書(shū)。
  2. &$output 輸出內(nèi)容。
  3. $passphrase 保護(hù)密鑰。
  4. $options 與openssl_pkey_new()的options 相同。

2.1.7 openssl_pkey_get_details(OpenSSLAsymmetricKey $key)

返回包含密鑰詳情的數(shù)組。成功時(shí)返回包含密鑰詳情的數(shù)組,失敗時(shí)返回 false。

$key 為openssl_pkey_new()產(chǎn)生的資源。

返回?cái)?shù)組包括bits (位數(shù))、 key(表示公鑰的字符串)和 type(密鑰類型)。

type包括 OPENSSL_KEYTYPE_RSAOPENSSL_KEYTYPE_DSA、 OPENSSL_KEYTYPE_DH、 OPENSSL_KEYTYPE_EC 或者是 -1。-1代表未知類型。

  • OPENSSL_KEYTYPE_RSA,一個(gè)額外的鍵名為 "rsa" 的數(shù)組,包含了以下密鑰數(shù)據(jù):
    Key說(shuō)明
    "n"modulus
    "e"public exponent
    "d"private exponent
    "p"prime 1
    "q"prime 2
    "dmp1"exponent1, d mod (p-1)
    "dmq1"exponent2, d mod (q-1)
    "iqmp"coefficient, (inverse of q) mod p
  • OPENSSL_KEYTYPE_DSA, 一個(gè)額外的鍵為 "dsa" 的數(shù)組, 包含如下的密鑰數(shù)據(jù)。
    Key說(shuō)明
    "p"prime number (public)
    "q"160-bit subprime, q | p-1 (public)
    "g"generator of subgroup (public)
    "priv_key"private key x
    "pub_key"public key y = g^x
  • OPENSSL_KEYTYPE_DH, 一個(gè)額外的鍵為 "dh" 的數(shù)組,包含如下的密鑰數(shù)據(jù)。
    Key說(shuō)明
    "p"prime number (shared)
    "g"generator of Z_p (shared)
    "priv_key"private DH value x
    "pub_key"public DH value g^x
  • OPENSSL_KEYTYPE_EC,一個(gè)額外的鍵為 "ec" 的數(shù)組,包含如下的密鑰數(shù)據(jù)。
    Key說(shuō)明
    "curve_name"name of curve, see openssl_get_curve_names()
    "curve_oid"ASN1 Object identifier (OID) for EC curve.
    "x"x coordinate (public)
    "y"y coordinate (public)
    "d"private key
    $res = openssl_pkey_new();openssl_pkey_export($res, $private_key); //生成私鑰$public_key_pem = openssl_pkey_get_details($res)['key'];$public_key = openssl_pkey_get_public($public_key_pem);//生成公鑰$msg = "qweqwe";openssl_sign($msg, $sign, $private_key, OPENSSL_ALGO_SHA256);$result = openssl_verify($msg, $sign, $public_key, OPENSSL_ALGO_SHA256);var_dump($result);測(cè)試結(jié)果
int(1)

2.2 md5(string $string, bool $binary = false)

md5加密。以 32 字符的十六進(jìn)制數(shù)形式返回散列值。

如果可選的 binary 被設(shè)置為 true,那么 md5 摘要將以 16 字符長(zhǎng)度的原始二進(jìn)制格式返回。

$str = "qwe";
$str1 = md5($str);
$str2 = md5($str, true);
var_dump($str1, $str2);#測(cè)試結(jié)果
string(32) "76d80224611fc919a5d54f0ff9fba446"
string(16) "v$aOF"

2.3 crypt(string $string, string $salt)

單向字符串散列。此函數(shù)(還)不能安全地適用于二進(jìn)制對(duì)象!返回基于標(biāo)準(zhǔn) UNIX DES 算法或替代算法的散列字符串。

php8之前$salt可選,php8之后必填。不設(shè)置$salt會(huì)創(chuàng)建弱散列,既設(shè)置$salt安全性更高。為了更好的安全性,請(qǐng)確保指定足夠強(qiáng)度的鹽值。

password_hash()是crypt() 的簡(jiǎn)單封裝。password_verify()可使用crypt()加密的值。

散列類型由鹽值參數(shù)觸發(fā)。如果沒(méi)有提供鹽值,PHP 將自動(dòng)生成一個(gè) 2 個(gè)字符(DES)或者 12 個(gè)字符(MD5)的鹽值 ,這取決于 MD5 crypt() 的可用性。PHP 設(shè)置了名為 CRYPT_SALT_LENGTH 的常量,用來(lái)表示可用散列允許的最長(zhǎng)有效鹽值。

支持以下散列類型:

  • CRYPT_STD_DES - 基于標(biāo)準(zhǔn) DES 算法的散列使用 "./0-9A-Za-z" 字符中的兩個(gè)字符作為鹽值。在鹽值中使用非法的字符將導(dǎo)致 crypt() 失敗。
  • CRYPT_EXT_DES - 擴(kuò)展的基于 DES 算法的散列?!皊ale” 為 9 個(gè)字符的字符串,由 1 個(gè)下劃線后面跟著4個(gè)字符循環(huán)次數(shù)和4個(gè)字符鹽值組成。這些 4個(gè)字符字符串都編碼為 24 字節(jié),最低有效位在前。值 063 被編碼為 ./0-9A-Za-z。在鹽值中使用非法的字符將導(dǎo)致 crypt() 失敗。
  • CRYPT_MD5 - MD5 散列使用一個(gè)以 $1$ 開(kāi)始的 12 字符的字符串鹽值。
  • CRYPT_BLOWFISH - Blowfish 散列使用如下鹽值:“$2a$”、“$2x$” 或 “$2y$”,兩位 cost 參數(shù),“$” 以及 22 位由 “./0-9A-Za-z” 中的字符組合而成的字符串。在鹽值中使用此范圍之外的字符將導(dǎo)致 crypt() 返回一個(gè)空字符串。兩位 cost 參數(shù)是循環(huán)次數(shù)以 2 為底的對(duì)數(shù),它的范圍是 04-31,超出這個(gè)范圍將導(dǎo)致 crypt() 失敗。 “$2x$” 可能很弱,“$2x$” 散列對(duì)其兼容并增強(qiáng)安全性。對(duì)于新的散列,應(yīng)該使用“$2y$”。
  • CRYPT_SHA256 - SHA-256 算法使用一個(gè)以 $5$ 開(kāi)頭的 16 字符字符串鹽值進(jìn)行散列。如果鹽值字符串以 “rounds=<N>$” 開(kāi)頭,N 的數(shù)字值將被用來(lái)指定散列循環(huán)的執(zhí)行次數(shù),這點(diǎn)很像 Blowfish 算法的 cost 參數(shù)。默認(rèn)的循環(huán)次數(shù)是 5000,最小是 1000,最大是 999,999,999。超出這個(gè)范圍的 N 將會(huì)被轉(zhuǎn)換為最接近的值。
  • CRYPT_SHA512 - SHA-512 算法使用一個(gè)以 $6$ 開(kāi)頭的 16 字符字符串鹽值進(jìn)行散列。如果鹽值字符串以 “rounds=<N>$” 開(kāi)頭,N 的數(shù)字值將被用來(lái)指定散列循環(huán)的執(zhí)行次數(shù),這點(diǎn)很像 Blowfish 算法的 cost 參數(shù)。默認(rèn)的循環(huán)次數(shù)是 5000,最小是 1000,最大是 999,999,999。超出這個(gè)范圍的 N 將會(huì)被轉(zhuǎn)換為最接近的值。
    $str = "qwe";$salt = [];$salt[1] = "Ab";$salt[2] = "_0001qwea";$salt[3] = "$1$123456789";$salt[4] = "$2y$";$salt[5] = '$5$qweqweqwe1234';$salt[6] = 'rounds=200$qweqwe';$salt[7] = '$6$asdasdasd1234';$salt[8] = 'rounds=300$';foreach ($salt as $key => $value) {$str1 = crypt($str, $value);var_dump($value . "——————" . $str1);$result = password_verify($str, $str1);var_dump($result);}

?測(cè)試結(jié)果

string(33) "Ab——————Ab/ILIFe8a.Hs"
bool(true)
string(47) "_0001qwea——————_0001qweaWSalSujA21g"
bool(true)
string(64) "$1$123456789——————$1$12345678$cUfiadV.wKBZVZPHNWyu.1"
bool(true)
string(24) "$2y$——————*0"
bool(false)
string(94) "$5$qweqweqwe1234——————$5$qweqweqwe1234$gx1my2HVZe1zw03lEcrklQ30A2aeS5UdDhw1hRV5IC/"
bool(true)
string(48) "rounds=200$qweqwe——————roDektsuRs4PI"
bool(true)
string(137) "$6$asdasdasd1234——————$6$asdasdasd1234$P8w7i6FURNeU2yqsepHrNZtpS20HQkGqtIjR9tjSkBQPIBAuTUzpAId1kqJu9ohR3jfiZK28DsSndLzUaL4be1"
bool(true)
string(42) "rounds=300$——————roDektsuRs4PI"
bool(true)

1.4 password

1.4.1 password_hash(string $password, string|int|null $algo, array $options = [])

密碼加密。返回字符串。

$algo 在散列密碼時(shí)指示算法的密碼算法常量

$options 一個(gè)包含有選項(xiàng)的關(guān)聯(lián)數(shù)組。

每個(gè)算法常量使用的選項(xiàng)數(shù)組不同,參考PHP: 預(yù)定義常量 - Manual。

1.4.2 password_verify(string $password, string $hash)

密碼驗(yàn)證。驗(yàn)證$password和散列值$hash是否相符。

password_hash()中以PASSWORD_BCRYPT為例。修改cost參數(shù),好像是修改crypt()中 CRYPT_BLOWFISH中cost的值,必須是兩位數(shù)字。

    $str = "qweasd";$options = ['cost' => "12",];$str1 = password_hash($str, PASSWORD_BCRYPT, $options);var_dump($str1);$result = password_verify($str, $str1);var_dump($result);#測(cè)試結(jié)果
string(60) "$2y$12$CaacB/2Q5U3mexNr9rB0yOxSDdlPTK758wQqIBl9vgTMsryeqCGyq"
bool(true)

三 字符集轉(zhuǎn)換 iconv

需要安裝擴(kuò)展iconv。php -m 可以查詢。

3.1 iconv_set_encoding(string $type,string $encoding)

為字符編碼轉(zhuǎn)換設(shè)定當(dāng)前設(shè)置。

type 可以為input_encoding、output_encoding、internal_encoding。

encoding 字符集。

經(jīng)過(guò)文檔查詢iconv.input_encoding、iconv.output_encoding、iconv.internal_encoding已自 PHP 5.6.0 起廢棄。強(qiáng)烈建議不要使用本特性。

所以這個(gè)函數(shù)做好不要使用。

本地測(cè)試環(huán)境php8提示Deprecated信息。

3.2 iconv_get_encoding(string $type = "all")

獲取 iconv 擴(kuò)展的內(nèi)部配置變量。

type值可以是all、input_encoding、output_encoding、internal_encoding。

$info = iconv_get_encoding();
var_dump($info);
$info = iconv_get_encoding("input_encoding");
var_dump($info);

測(cè)試結(jié)果

array(3) {["input_encoding"]=>string(5) "UTF-8"["output_encoding"]=>string(5) "UTF-8"["internal_encoding"]=>string(5) "UTF-8"
}
string(5) "UTF-8"

3.3 iconv_mime_encode(string $field_name, string $field_value, array $options = [])

field_name 字段名,field_value 字段值。返回字符串或布爾值。

options:

  • scheme 指定編碼方式。B代表base64,Q引號(hào)可打印的編碼方案。
  • input-charset 默認(rèn)iconv.internal_encoding
  • output-charset 默認(rèn) iconv.internal_encoding
  • line-length 指定標(biāo)題行的最大長(zhǎng)度。以防產(chǎn)生的報(bào)頭字段比該參數(shù)的值長(zhǎng)。如果沒(méi)有給出,長(zhǎng)度將限制為76個(gè)字符。
  • line-break-chars 設(shè)置拆包字符。粘包處理用。

3.4 iconv_mime_decode(string $string, int $mode = 0, ?string $encoding = null)

解碼一個(gè)MIME頭字段。返回字符串或布爾值。

string 編碼頭

model 模式。可選值:ICONV_MIME_DECODE_STRICT、ICONV_MIME_DECODE_CONTINUE_ON_ERROR。

ICONV_MIME_DECODE_STRICT:值為1。傳入的頭字段將會(huì)完全一致的按照??RFC2047的標(biāo)準(zhǔn)定義被解碼. 這個(gè)選項(xiàng)默認(rèn)是禁用的,因?yàn)橛泻芏嗔闵⒌泥]件用戶代理商不遵守標(biāo)準(zhǔn)規(guī)范并且不生成正確的MIME頭。

ICONV_MIME_DECODE_CONTINUE_ON_ERROR:值為2。忽略任何錯(cuò)誤語(yǔ)法,并繼續(xù)處理傳入的頭字段。

3.5 iconv_mime_decode_headers(string $headers, int $mode = 0, ?string $encoding = null)

一次性解碼多個(gè) MIME 頭字段。返回?cái)?shù)組或布爾值。

model 與iconv_mime_decode()中參數(shù)說(shuō)明相同。

    $preferences = array("input-charset" => "ISO-8859-1","output-charset" => "UTF-8","line-length" => 76,"line-break-chars" => "\n",);$preferences["scheme"] = "Q";// This yields "Subject: =?UTF-8?Q?Pr=C3=BCfung=20Pr=C3=BCfung?="$str1 = iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);var_dump($str1);$preferences["scheme"] = "B";// This yields "Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?="$str2 = iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);var_dump($str2);$arr = iconv_mime_decode($str1, 1, "UTF-8");var_dump($arr);$arr = iconv_mime_decode($str2, 2, "ISO-8859-1");var_dump($arr);$headers = ['subject' => $str1,'date' => iconv_mime_encode("Date", date('Y-m-d'), $preferences),];$headers_str = join(PHP_EOL, $headers);$headers = iconv_mime_decode_headers($headers_str, 0, "ISO-8859-1");var_dump($headers);

?測(cè)試結(jié)果

string(60) "Subject: =?UTF-8?Q?Pr=C3=83=C2=BCfung=20Pr=C3=83=C2=BCfung?="
string(49) "Subject: =?UTF-8?B?UHLDg8K8ZnVuZyBQcsODwrxmdW5n?="
string(30) "Subject: Pr??fung Pr??fung"
string(26) "Subject: Prüfung Prüfung"
array(2) {["Subject"]=>string(17) "Prüfung Prüfung"["Date"]=>string(10) "2024-02-02"
}

3.6 iconv(string $from_encoding, string $to_encoding, string $string)

$string字符串,$from_encoding轉(zhuǎn)變?yōu)?to_encoding編碼。返回字符串或布爾值。

    $text = "test '€'.";var_dump($text);$text2 = iconv("UTF-8", "ISO-8859-1//IGNORE", $text);var_dump($text2);$text3 = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text);var_dump($text3);$test4 = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $text);var_dump($test4);

測(cè)試結(jié)果

string(11) "test '€'."
string(8) "test ''."
string(11) "test 'EUR'."
string(14) "test 'a?'."

3.7 iconv_strlen(string $string, ?string $encoding = null)

基于指定的字符集計(jì)算字符長(zhǎng)度。

strlen()根據(jù)字節(jié)數(shù)。

mb_strlen(string $string, ?string $encoding = null)根據(jù)給定的編碼返回的字符數(shù)。encoding省略或是 null,則使用內(nèi)部字符編碼。

    $text = "qwe 123 測(cè)試,( -&- )";$len = iconv_strlen($text, "ISO-8859-1");var_dump($len);$len = iconv_strlen($text, "UTF-8");var_dump($len);$len = iconv_strlen($text);var_dump($len);$len = strlen($text);var_dump($len);$len = mb_strlen($text);var_dump($len);

測(cè)試結(jié)果

int(28)
int(18)
int(18)
int(28)
int(18)

根據(jù)php 官方文檔:PHP: iconv_strlen - Manual

其長(zhǎng)度和指定編碼有關(guān),所以和strlen()長(zhǎng)度不一定一樣。但是和mb_strlen()相比,從測(cè)試結(jié)果上看效果一樣。

http://aloenet.com.cn/news/30628.html

相關(guān)文章:

  • 做兼職的網(wǎng)站企業(yè)網(wǎng)站seo優(yōu)化公司
  • 整站策劃營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站優(yōu)化b2b網(wǎng)站有哪些平臺(tái)
  • dede自適應(yīng)網(wǎng)站注意事項(xiàng)營(yíng)銷網(wǎng)站方案設(shè)計(jì)
  • 做電商必須知道的網(wǎng)站短視頻關(guān)鍵詞優(yōu)化
  • 做網(wǎng)站業(yè)務(wù)提成多少it培訓(xùn)
  • 公司名稱大全兩個(gè)字引擎搜索優(yōu)化
  • wordpress用戶登陸武漢seo優(yōu)化服務(wù)
  • 做網(wǎng)站圖片多大企業(yè)網(wǎng)絡(luò)營(yíng)銷策略分析案例
  • 南京建設(shè)網(wǎng)站首頁(yè)上海營(yíng)銷公司
  • 濟(jì)南高端網(wǎng)站建設(shè)無(wú)錫百度推廣開(kāi)戶
  • 移動(dòng)版網(wǎng)站怎么做武漢seo排名公司
  • 定西市小企業(yè)網(wǎng)站建設(shè)建設(shè)西安專業(yè)seo
  • 網(wǎng)站正能量免費(fèi)推廣軟件晚上推廣的渠道和方法有哪些
  • 西安網(wǎng)站制作的公司廊坊seo網(wǎng)站管理
  • 黃山網(wǎng)站建設(shè)推廣網(wǎng)絡(luò)輿情監(jiān)測(cè)系統(tǒng)
  • 現(xiàn)在pc網(wǎng)站的標(biāo)準(zhǔn)一般是做多大長(zhǎng)沙網(wǎng)站優(yōu)化推廣
  • 網(wǎng)站建設(shè)gzdlzgg北京網(wǎng)絡(luò)網(wǎng)站推廣
  • 贛州網(wǎng)站建設(shè)jxgzg3百度導(dǎo)航如何設(shè)置公司地址
  • 微網(wǎng)站 報(bào)價(jià)重慶百度seo
  • 做淘寶客網(wǎng)站用什么系統(tǒng)谷歌瀏覽器安卓版
  • 聊城手機(jī)網(wǎng)站建設(shè)公司seo技術(shù)306
  • 具有營(yíng)銷價(jià)值好的網(wǎng)站武漢seo優(yōu)化代理
  • 網(wǎng)站建設(shè)是好的競(jìng)價(jià)賬戶托管外包
  • 有沒(méi)有專業(yè)做二維碼連接網(wǎng)站在營(yíng)銷技巧第三季
  • 圖片制作視頻的appseo宣傳
  • 如何提高網(wǎng)站百度權(quán)重如何去除痘痘有效果
  • 鄭州官網(wǎng)網(wǎng)絡(luò)營(yíng)銷外包上海網(wǎng)站seo策劃
  • 平度疫情最新消息成都seo推廣
  • 品牌網(wǎng)站建設(shè)有哪些內(nèi)容吳中seo網(wǎng)站優(yōu)化軟件
  • 網(wǎng)站長(zhǎng)春網(wǎng)站建設(shè)惠州網(wǎng)絡(luò)推廣平臺(tái)