佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > php生成用戶密碼的兩種方式

php生成用戶密碼的兩種方式

熱門標(biāo)簽:Linux服務(wù)器 阿里云 銀行業(yè)務(wù) 電子圍欄 團(tuán)購(gòu)網(wǎng)站 科大訊飛語(yǔ)音識(shí)別系統(tǒng) 服務(wù)器配置 Mysql連接數(shù)設(shè)置

在用戶系統(tǒng)中,生成用戶的密碼是很重要的,而簡(jiǎn)單的密碼必然給一些不法用戶開(kāi)了一些門戶,這里列出幾種常見(jiàn)的密碼生成方式

一、md5密碼 

這種應(yīng)該算是最常見(jiàn)的密碼加密方式了
md5是屬于非對(duì)稱加密中的一種,這種密碼方式其實(shí)說(shuō)安全也很安全,而因?yàn)楣E鲎驳拇嬖?,?huì)導(dǎo)致可能會(huì)出現(xiàn)漏洞
最好是在加密的時(shí)候,加入混淆字符串,如下所示

?php
//加密
function md5_password($password, $hash = 'autofelix_')
{
    return md5($hash . $password);
}
 
//驗(yàn)證
$userinfo = /** 查詢用戶信息 **/;
 
if ($userinfo['password'] !== md5_password($password)) {
    /** 密碼錯(cuò)誤邏輯 **/
}
 
/** 密碼正確,繼續(xù)往后走邏輯 **/

二、hash密碼

這種加密方式主要使用單向散列算法創(chuàng)建密碼的散列
PASSWORD_DEFAULT 使用 bcrypt 算法
PASSWORD_BCRYPT 使用 CRYPT_BLOWFISH 算法創(chuàng)建散列
PASSWORD_ARGON2I 使用 Argon2 散列算法創(chuàng)建散列
這種密碼加密方式數(shù)據(jù)庫(kù)里儲(chǔ)存結(jié)果的列可超過(guò)60個(gè)字符,所以varchar長(zhǎng)度請(qǐng)?jiān)O(shè)置255

?php
//加密
function generatePassword($password)
{
   return password_hash($password, PASSWORD_DEFAULT);
}
 
//驗(yàn)證
function verifyPassword($password, $hashPassword)
{
   return password_verify($password, $hashPassword);
}
 
//加密結(jié)果:$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

PS:php生成隨機(jī)密碼的幾種方法

方法一:

1、在 33 - 126 中生成一個(gè)隨機(jī)整數(shù),如 35,
2、將 35 轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼字符,如 35 對(duì)應(yīng) #
3、重復(fù)以上 1、2 步驟 n 次,連接成 n 位的密碼

該算法主要用到了兩個(gè)函數(shù),mt_rand ( int $min , int $max )函數(shù)用于生成隨機(jī)整數(shù),其中 $min - $max 為 ASCII 碼的范圍,這里取 33 -126 ,可以根據(jù)需要調(diào)整范圍,如ASCII碼表中 97 - 122 位對(duì)應(yīng) a - z 的英文字母,具體可參考 ASCII碼表; chr ( int $ascii )函數(shù)用于將對(duì)應(yīng)整數(shù) $ascii 轉(zhuǎn)換成對(duì)應(yīng)的字符。

function create_password($pw_length = 8){
 $randpwd = '';
 for ($i = 0; $i  $pw_length; $i++) {
  $randpwd .= chr(mt_rand(33, 126));
 }
 return $randpwd;
}

// 調(diào)用該函數(shù),傳遞長(zhǎng)度參數(shù)$pw_length = 6
echo create_password(6);

方法二:

1、預(yù)置一個(gè)的字符串 $chars ,包括 a - z,A - Z,0 - 9,以及一些特殊字符
2、在 $chars 字符串中隨機(jī)取一個(gè)字符
3、重復(fù)第二步 n 次,可得長(zhǎng)度為 n 的密碼

function generate_password( $length = 8 ) {
 // 密碼字符集,可任意添加你需要的字符
 $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^*()-_ []{}>~`+=,.;:/?|';

 $password = '';
 for ( $i = 0; $i  $length; $i++ ) {
  // 這里提供兩種字符獲取方式
  // 第一種是使用 substr 截取$chars中的任意一位字符;
  // 第二種是取字符數(shù)組 $chars 的任意元素
  // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
  $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
 }

 return $password;
}

方法三:

1、預(yù)置一個(gè)的字符數(shù)組 $chars ,包括 a - z,A - Z,0 - 9,以及一些特殊字符
2、通過(guò)array_rand()從數(shù)組 $chars 中隨機(jī)選出 $length 個(gè)元素
3、根據(jù)已獲取的鍵名數(shù)組 $keys,從數(shù)組 $chars 取出字符拼接字符串。該方法的缺點(diǎn)是相同的字符不會(huì)重復(fù)取。

function make_password( $length = 8 ) {
 // 密碼字符集,可任意添加你需要的字符
 $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
 'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 
 't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 
 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 
 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', 
 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', 
 '@','#', '$', '%', '^', '', '*', '(', ')', '-', '_', 
 '[', ']', '{', '}', '', '>', '~', '`', '+', '=', ',', 
 '.', ';', ':', '/', '?', '|');

 // 在 $chars 中隨機(jī)取 $length 個(gè)數(shù)組元素鍵名
 $keys = array_rand($chars, $length); 

 $password = '';
 for($i = 0; $i  $length; $i++) {
  // 將 $length 個(gè)數(shù)組元素連接成字符串
  $password .= $chars[$keys[$i]];
 }

 return $password;
}

方法四:

本方法是本文被藍(lán)色理想轉(zhuǎn)載后,一名網(wǎng)友提供的一個(gè)新方法,算法簡(jiǎn)單,代碼簡(jiǎn)短,只是因?yàn)閙d5()函數(shù)的返回值的緣故,生成的密碼只包括字母和數(shù)字,不過(guò)也算是一個(gè)不錯(cuò)的方法。算法思想:
1、time() 獲取當(dāng)前的 Unix 時(shí)間戳
2、將第一步獲取的時(shí)間戳進(jìn)行 md5() 加密
3、將第二步加密的結(jié)果,截取 n 位即得想要的密碼

function get_password( $length = 8 ) {
 $str = substr(md5(time()), 0, $length);
 return $str;
}

到此這篇關(guān)于php生成用戶密碼的兩種方式 的文章就介紹到這了,更多相關(guān)php生成用戶密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PHP實(shí)現(xiàn)兩種排課方式
  • 詳細(xì)分析PHP7與PHP5區(qū)別
  • php類中static與self的使用區(qū)別淺析
  • php如何用PDO操作大數(shù)據(jù)對(duì)象
  • php使用workman框架實(shí)現(xiàn)socket服務(wù)以及連接客戶端

標(biāo)簽:江蘇 棗莊 廣元 衢州 蚌埠 萍鄉(xiāng) 衡水 大理

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php生成用戶密碼的兩種方式》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    方山县| 乃东县| 扶沟县| 杭锦后旗| 保定市| 新河县| 会同县| 开化县| 安国市| 江西省| 泰顺县| 镇雄县| 航空| 普兰店市| 大方县| 右玉县| 宝丰县| 城口县| 德令哈市| 海门市| 绵竹市| 乌拉特后旗| 游戏| 疏附县| 哈密市| 潞西市| 永新县| 莆田市| 玉环县| 沙河市| 光山县| 宜黄县| 紫云| 鄱阳县| 武山县| 得荣县| 信丰县| 沐川县| 阿巴嘎旗| 鹿邑县| 双流县|