基於真實的php密碼強度估算庫(密碼強度計算)

  • 1、為了加強賬戶的安全性,17級同學對密碼強度有一定要求php實現
  • 2、php怎麼判斷密碼的強度實例詳解
  • 3、php登錄頁面 用戶名密碼和數據庫中比較的判斷函數怎麼寫 求教!!
  • 4、php及數據庫
  • 5、PHP 加密:AES & RSA
  • 6、php網頁的密碼驗證繞過求助(簡單代碼)

給你個函數:

function check_psd($psd){

$r=”/^[a-zA-Z]{1}[a-zA-Z0-9]{7,}$/”;

if(preg_match($r,$psd)==false){

return false;

}

if(preg_match(“/^[a-z]+$/”,$psd)||preg_match(“/^[A-Z]+$/”,$psd)){

return false;

}

return true;

}

//第一個 if 滿足你的1,2,4 的三個條件的判斷;第二個 if 判斷你的第二個條件。

1、php頁面

$score =

0;if(!empty($_GET[‘value’])){ //接收的值 $str = $_GET[‘value’];} else{ $str = ”;}if(preg_match(“/[0-9]+/”,$str)){ $score ++;}if(preg_match(“/[0-9]{3,}/”,$str)){ $score ++;}if(preg_match(“/[a-z]+/”,$str)){ $score ++;}if(preg_match(“/[a-z]{3,}/”,$str)){ $score ++;}if(preg_match(“/[A-Z]+/”,$str)){ $score ++;}if(preg_match(“/[A-Z]{3,}/”,$str)){ $score ++;}if(preg_match(“/[_|\-|+|=|*|!|@|#|$|%|^||(|)]+/”,$str)){ $score +=

2;}if(preg_match(“/[_|\-|+|=|*|!|@|#|$|%|^||(|)]{3,}/”,$str)){ $score ++

;}if(strlen($str)

= 10){ $score ++;}echo $score;exit;

二、html頁面

table cellspacing=”0″ cellpadding=”0″trtd輸入密碼:/tdtd colspan=”4″input type=”password” value=”” name=”newpwd” onblur=”getPassword();” //trtrtd密碼強度:/tdtd id=”idSM1″ align=”middle” width=”20%”span style=”height:0px;

line-height:0px;”

/spanspanid=”idSMT1″ style=”DISPLAY:

none”弱/span/tdtd id=”idSM2″ style=”BORDER-LEFT:

#fff 1px solid” align=”middle” width=”20%”span style=”height:0px;

line-height:0px;”

/spanspan id=”idSMT0″ style=”DISPLAY:inline;

FONT-WEIGHT: normal; COLOR: #666″無/spanspan id=”idSMT2″ style=”DISPLAY:

none”中等/span/tdtd id=”idSM3″ style=”BORDER-LEFT:

#fff 1px solid” align=”middle” width=”20%”span style=”height:0px;

line-height:0px;”

/spanspan id=”idSMT3″ style=”DISPLAY:

none”強/span/tdtd id=”idSM4″ style=”BORDER-LEFT:

#fff 1px solid” align=”middle” width=”20%”

span style=”height:0px;

line-height:0px;”

/spanspan id=”idSMT4″ style=”DISPLAY:

none”極好/span/td/tr/table

三、js

scriptfunction getPassword(){ var value

= $(“input[name=’newpwd’]”).attr(‘value’); $.get(‘index.php?r=account/testpwd’,{value:value},function(data){ if(data=1

data=3){ $(‘#idSM1’).attr(‘class’,’pwdChkCon1′); //弱 $(‘#idSM2’).attr(‘class’,’pwdChkCon0′); $(‘#idSM3’).attr(‘class’,’pwdChkCon0′); $(‘#idSM4’).attr(‘class’,’pwdChkCon0′); $(‘#idSMT1’).show(); $(‘#idSMT0’).hide(); $(‘#idSMT2’).hide(); $(‘#idSMT3’).hide(); $(‘#idSMT4’).hide(); } else if(data=4

data=6){ //中等 $(‘#idSM1’).attr(‘class’,’pwdChkCon2′); $(‘#idSM2’).attr(‘class’,’pwdChkCon2′); $(‘#idSM3’).attr(‘class’,’pwdChkCon0′); $(‘#idSM4’).attr(‘class’,’pwdChkCon0′); $(‘#idSMT0’).hide(); $(‘#idSMT1’).hide(); $(‘#idSMT2’).show(); $(‘#idSMT3’).hide(); $(‘#idSMT4’).hide(); } else if(data=7

data=8){ //強 $(‘#idSM1’).attr(‘class’,’pwdChkCon3′); $(‘#idSM2’).attr(‘class’,’pwdChkCon3′); $(‘#idSM3’).attr(‘class’,’pwdChkCon3′); $(‘#idSM4’).attr(‘class’,’pwdChkCon0′); $(‘#idSMT0’).hide(); $(‘#idSMT1’).hide(); $(‘#idSMT2’).hide(); $(‘#idSMT3’).show(); $(‘#idSMT4’).hide(); } else if(data=9

data=10){ //極好 $(‘#idSM1’).attr(‘class’,’pwdChkCon4′); $(‘#idSM2’).attr(‘class’,’pwdChkCon4′); $(‘#idSM3’).attr(‘class’,’pwdChkCon4′); $(‘#idSM4’).attr(‘class’,’pwdChkCon4′); $(‘#idSMT0’).hide(); $(‘#idSMT1’).hide(); $(‘#idSMT2’).hide(); $(‘#idSMT3’).hide(); $(‘#idSMT4’).show(); } });

}

四、css

style.pwdChkCon0 {BORDER-RIGHT: #bebebe 1px solid;BORDER-BOTTOM: #bebebe 1px solid;BACKGROUND-COLOR: #ebebeb;TEXT-ALIGN: center;}.pwdChkCon1 {BORDER-RIGHT: #bb2b2b 1px solid;BORDER-BOTTOM: #bb2b2b 1px solid;BACKGROUND-COLOR: #ff4545;TEXT-ALIGN: center;}.pwdChkCon2 {BORDER-RIGHT: #e9ae10 1px solid;BORDER-BOTTOM: #e9ae10 1px solid;BACKGROUND-COLOR: #ffd35e;TEXT-ALIGN: center;}.pwdChkCon3 {BORDER-RIGHT: #267a12 1px solid;BORDER-BOTTOM: #267a12 1px solid;BACKGROUND-COLOR: #3abb1c;TEXT-ALIGN: center;}.pwdChkCon4 {BORDER-RIGHT: #267a12 1px solid;BORDER-BOTTOM: #267a12 1px solid;BACKGROUND-COLOR: #3abb1c;TEXT-ALIGN: center;}

/style

(PS:本源代碼來源於互聯網)

function validate($name,$pwd){

    if ( $_POST[‘name’]== $name  $_POST[‘password’] == $pwd){

        echo ‘登陸成功’;

    }else{

        echo ‘登陸失敗’;

    }

}

還有,你的數據庫里的密碼是採用的md5加密,還是sha1加寫,或都md5結合加密串加密。如果採用了加密碼,$_POST[‘password’]的值,也應該進行相應的加密之後再與數據庫取出的密碼進行比對

PHP調用三種數據庫的方法

本文比較詳細的介紹PHP調用MySQL、ODBC以及ORACLE數據庫。

MySQL是一個小巧靈瓏的數據庫服務器軟件,對於中、小型應用系統是非常理想的。除了支持標準的ANSI SQL語句外,最重要的是,它還支持多種平台,而在Unix/Linux系統上,MySQL支持多線程運行方式,從而能獲得相當好的性能。它和PHP、 Apache一樣,是屬於開放源代碼軟件。其官方網站是:,上面提供Windows,Linux,Unix版本的源代碼的下載。

注意,MySQL訪問函數都需要有相應的權限才能運行。常用的相關函數介紹如下:

(1)integer mysql_connect(主機,用戶名,口令);

此函數開始一個對指定主機上的MySQL數據庫的連接。若該數據庫位於一個不同地端口,則在主機名後加上冒號和端口號。所有參數均為可選的,缺省情況下分別對應為本地主機、用戶正在執行的腳本名和空。主機可以是IP地址或域名。

在腳本執行結束時,連接被自動關閉,也可以用mysql_close提前關閉。

(2)boolean mysql_create_db(數據庫名);

創建一個數據庫。注意必須用一個帶有創建數據庫許可權的帳號打開連接。

(3)boolean mysql_select_db(數據庫名,連接號);

選擇缺省數據庫。

(4)integer mysql_query(SQL語句,連接號);

對指定數據庫進行查詢。如果SQL語句是select,則返回一個結果號,否則返回的值可以不理會。如果失敗,返回false.。

(5)array mysql_fetch_array(結果號);

取出下一行,返回一個數組.可以用數字下標訪問(第一個字段是下標 0),也可以用字符串下標訪問(即使用各字段名)。如已取了最後一行,返回 false.。

(6)mysql_fetch_row(結果號);

返回一個矩陣代表結果集中一行的所有域。每次調用都會產生下一行,直到沒有行剩下時返回false。每個域值都由一個從零開始的偏移量索引。這是從查詢中獲取結果的最快方法。

(7)integer mysql_num_rows(結果號);

返回結果集中行的數目

(8)integer mysql_num_fields(結果號);

返回結果集中域的數目。

(9)integer mysql_list_dbs();

向服務器查詢數據庫列表。它返回一個結果指針,該指針可用於mysql_fetch_row函數及類似函數。

(10)mysql_list_tables(數據庫名);

獲取一個指向指定數據庫的表單列表的結果指針。該結果指針可用於任何從結果集中獲取行的函數。

(11)mysql_close(連接號);

關閉對數據庫的連接。連接必須是由mysql_connect打開的。該函數的使用不是嚴格必需的,因為在腳本結束時,所有非永久鏈路都會被自動關閉。

(12)mysql_pconnect(主機,用戶名,口令);

與mysql_connect完全相似,但建立一個”永久連接”,該連接一經建立永不關閉,即使使用mysql_close函數或程序執行完畢也不關閉.下一次試圖建立永久連接時,系統如發現已存在一個永久連接,則直接返回該連接號而不重新創建。

下面是一個調用MYSQL數據庫並分頁顯示的例子。

?

$pagesize = 5; //每頁顯示5條記錄

$host=”localhost”;

$user=”user”;

$password=”psw”;

$dbname=”book”; //所查詢的庫表名;

//連接MySQL數據庫

mysql_connect(“$host”,”$user”,”$password”) or die(“無法連接MySQL數據庫服務器!”);

$db = mysql_select_db(“$dbname”) or die(“無法連接數據庫!”);

$sql = “select count(*) as total from pagetest”;//生成查詢記錄數的SQL語句

$rst = mysql_query($sql) or die(“無法執行SQL語句:$sql !”); //查詢記錄數

$row = mysql_fetch_array($rst) or die(“沒有更多的記錄!”); /取出一條記錄

$rowcount = $row[“total”];//取出記錄數

mysql_free_result($rst) or die(“無法釋放result資源!”); //釋放result資源

$pagecount = bcdiv($rowcount+$pagesize-1,$pagesize,0);//算出總共有幾頁

if(!isset($pageno)) {

$pageno = 1; //在沒有設置pageno時,缺省為顯示第1頁

}

if($pageno1) {

$pageno = 1; //若pageno比1小,則把它設置為1

}

if($pageno$pagecount) {

$pageno = $pagecount; //若pageno比總共的頁數大,則把它設置為最後一頁

}

if($pageno0) {

$href = eregi_replace(“%2f”,”/”,urlencode($PHP_SELF));//把$PHP_SELF轉換為可以在URL上使用的字符串,這樣的話就可以處理中文目錄或中文文件名

if($pageno1){//顯示上一頁的褳接

echo “a href=”” . $href . “?pageno=” . ($pageno-1) . “”上一頁/a “;

}

else{

echo “上一頁”;

}

for($i=1;$i$pageno;$i++){

echo “a href=”” . $href . “?pageno=” . $i . “”” . $i . “/a “;

}

echo $pageno . ” “;

for($i++;$i=$pagecount;$i++){

echo “a href=”” . $href . “?pageno=” . $i . “”” . $i . “/a “;

}

if($pageno$pagecount){//顯示下一頁的褳接

echo “a href=”” . $href . “?pageno=” . ($pageno+1) . “”下一頁/a “;

}

else{

echo “下一頁 “;

}

$offset = ($pageno-1) * $pagesize;//算出本頁第一條記錄在整個表中的位置(第一條記錄為0)

$sql = “select * from pagetest LIMIT $offset,$pagesize”;//生成查詢本頁數據的SQL語句

$rst = mysql_query($sql);//查詢本頁數據

$num_fields = mysql_num_fields($rst);//取得字段總數

$i = 0;

while($i$num_fields){//取得所有字段的名字

$fields[$i] = mysql_field_name($rst,$i);//取得第i+1個字段的名字

$i++;

}

echo “table border=”1″ cellspacing=”0″ cellpadding=”0″”;//開始輸出表格

echo “tr”;

reset($fields);

while(list(,$field_name)=each($fields)){//顯示字段名稱

echo “th$field_name/th”;

}

echo “/tr”;

while($row=mysql_fetch_array($rst)){//顯示本頁數據

echo “tr”;

reset($fields);

while(list(,$field_name)=each($fields)){//顯示每個字段的值

$field_value = $row[$field_name];

if($field_value==””){

echo “td /td”;

}

else{

echo “td$field_value/td”;

}

}

echo “/tr”;

}

echo “/table”;//表格輸出結束

mysql_free_result($rst) or die(“無法釋放result資源!”);//釋放result資源

}

else{

echo “目前該表中沒有任何數據!”;

}

mysql_close($server) or die(“無法與服務器斷開連接!”);//斷開連接並釋放資源

?

開放數據庫連接(ODBC)已成為一種與數據庫進行通信的工業標準。PHP也提供了標準的接口,使得PHP能調用Access,SQL SERVER等數據庫。其相關函數是:

(1)integer odbc_connect(string dsn, string user, string password)

連接到一個ODBC數據庫源名字上。

(2)integer odbc_exec(integer connection, string query)或 odbc_do(integer connection, string query)

在一個連接上執行查詢。

(3)boolean odbc_fetch_row(integer result, integer row)

從一個結果集中獲取一行數據。Row參數是可選的,若為空缺,則返回下一個有效行。在結果集中不再剩餘行時返回false。

(4)boolean odbc_close(integer connection)

關閉一個數據庫的連接。若在該連接上有打開的事務,則返回一個錯誤,而且連接不會被關閉。

最後,還是看個分頁的例子:

?

//設定每頁顯示條數

$show_num = 10;

$spages = $pages;//避免$pages後期被改變

//定義連接

$dsn = “localhost”;

$user = “sa”;

$password = “”;

//計算總記錄數

$rs_num = “select count(*) as id from bbs where zu=’0′ and lei='”.$lei.”‘”;

$conn_id = odbc_connect($dsn,$user,$password);

$rnum = odbc_exec($conn_id,$rs_num);

while(odbc_fetch_row($rnum)){

$total_rs = odbc_result($rnum,”id”);//將總記錄數放入$total_rs變量

}

//計算與頁有關的條數

$nnn = $total_rs / $show_num;//計算總頁數

$hnnn = intval($nnn);//將總頁數取整

$cnnnn = $nnn – $hnnn;

//計算所需總頁數

switch ($cnnn){

case “0”:

$hnnn++;

$nnn = $hnnn;//總頁數

break;

default :

$nnn = $hnnn;//總頁數

break;

};

if ($nnn == 0)$nnn++;

//計算頁面改變所需的條件

$fore = $pages;

$next = $pages;

$fore -= 1;

$next += 1;

if ($fore 0) {

echo “a首頁/a”;

echo “a前頁/a”;

};

if ($pages $nnn) {

echo “a後頁/a”;

echo “a尾頁/a”;

};

echo “共”.$nnn.”頁”;

$query_string = “SELECT * FROM table where condition order by you wanted order”;

$cur = odbc_exec($conn_id,$query_string);

//取到循環的頂部

$cnum = ($pages-1) * $show_num;//計算當前的記錄游標的位置

//空循環到顯示記錄游標處

if ($cnum != 0){

for ($i=0;$i=$cnum;odbc_fetch_row($cur));

};

$i=1;

//顯示記錄

while(odbc_fetch_row($cur)){

echo ;

if ($i == $show_num){//在不滿頁數時跳出程序

break;

};

$i++;

};

//關閉連接

odbc_close($conn_id);

?

Oracle(甲骨文)是世界上最為流行的關係數據庫。它是大公司推崇的工業化的強有力的引擎。我們先看看其相關的函數:

(1)integer ora_logon(string user , string password)

開始對一個Oracle數據庫服務器的連接。

(2)integer ora_open(integer connection)

打開給出的連接的游標。

(3)integer ora_do(integer connection, string query)

在給出的連接上執行查詢。PHP生成一個指示器,解析查詢,並執行之。

(4)integer ora_parse(integer cursor, string query)

解析一個查詢並準備好執行。

(5)boolean ora_exec(integer cursor)

執行一個先前由ora_parse函數解析過的查詢。

(6)boolean ora_fetch(integer cursor)

此函數會使得一個執行過的查詢中的行被取到指示器中。這使得您可以調用ora_getcolumn函數。

(7)string ora_getcolumn(integer cursor, integer column)

返回當前的值。列由零開始的數字索引。

(8)boolean ora_logoff(integer connection)

斷開對數據庫服務器的鏈接。

以下是向ORACLE數據庫插入數據的示例程序:

html

headtitle向ORACLE數據庫中插入數據/title/head

body

form action=”?echo $PHP_SELF;?” method=”post”

table border=”1″ cellspacing=”0″ cellpadding=”0″

tr

thID/th

thname/th

thDescription/th

/tr

tr

tdinput type=”text” name=”name” maxlength=”50″ size=”10″/td

tdinput type=”text” name=”email” maxlength=”255″ size=”30″/td

tdinput type=”text” name=”Description” maxlength=”255″ size=”50″/td

/tr

tr align=”center”

td colspan=”3″input type=”submit” value=”提交”  input type=”reset” value=”重寫”/td

/tr

/table

/form

?

//先設置兩個環境變量ORACLE_HOME,ORACLE_SID

putenv(“ORACLE_HOME=/oracle/app/oracle/product/8.0.4”);

putenv(“ORACLE_SID=ora8”);

//設置網頁顯示中文

putenv(“NLS_LANG=Simplified_Chinese.zhs16cgb231280”);

if($connection=ora_logon(“scott”,”tiger”)) {

//庫表test有ID,name,Description三項

$sql = ‘insert into test(ID,name,Description) values ‘;

$sql .= ‘(” . $ID . ”,” . $name . ”,”. $Description . ”)’;

if($cursor=ora_do($connect,$sql)) {

print(“insert finished!”);

}

$query = ‘select * from test’;

if($cursor=ora_do($connect,$query)) {

ora_fetch($cursor);

$content0=ora_getcolumn($cursor,0);

$content1=ora_getcolumn($cursor,1);

$content2=ora_getcolumn($cursor,2);

print(“$content0”);

print(“$content1”);

print(“$content2”);

ora_close($cursor);

}

ora_logoff($connection);

}

?

/body

/html

通過PHP你可以輕鬆的連接到數據庫,請求數據並將其顯示在你的web站點中,甚至修改數據庫中的數據。 MySQL是一種很流行的數據庫,並且在互聯網中有許多有關PHP與MySQL的教程。MySQL是免費的,這一點也許就吸引了不少人。由於其廣泛應用, 我就不想在這裡贅述MySQL的使用方法了。Oracle被大量在企業應用中採用,因此我們就利用Oracle來介紹PHP與數據庫的連接。我們當然不會 提及Oracle數據庫的設計原理,原因是這已經超出了我們的討論範圍。

PHP提供了兩套函數與Oracle連接,分別是ORA_和OCI函數。其中ORA_函數略顯陳舊。OCI函數更新據說更好一些。兩者的使用語法幾乎相差無幾。如前所述,你的PHP安裝選項應該可以支持兩者的使用。

想獲得更多有關在Microsoft Windows平台上安裝支持PHP3的Apache服務器的知識以及更多有關Oracle數據庫的知識,請查閱以下URL:。

4.1 連接

if ($conn=Ora_Logon(“user@TNSNAME”,”password”))

{

echo “SUCCESS ! Connected to database\n”;

}

else

{

echo “Failed :-( Could not connect to database\n”;

}

Ora_Logoff($conn);

phpinfo();

?

以上代碼使用TNSNAME(在你的tnsnames.ora文件中指明)定義的Oracle數據庫名稱、用戶名稱和密碼連接數據庫。在成功連接的基礎上,ora_logon函數返回一個非零的連接ID並儲存在變量$conn中。

4.2 查詢

假設與數據庫已經連接就緒,下面我們就來實際的應用對數據庫的查詢。下面的代碼演示了一個連接並查詢的典型例子:

/*

* 連接數據庫並執行查詢

*/

function printoraerr($in_cur)

{

// 檢查Oracle是否出錯

// 如果存在錯誤則顯示

// 當指針被激活時每次請求Oracle後調用該函數

if(ora_errorcode($in_cur))

echo “Oracle code – “.ora_error($in_cur).”\n”;

return;

}

/** 主程序 */

if (!($conn=ora_logon(“user@TNSNAME”,”password”)))

{

echo “Connection to database failed\n”;

exit;

}

echo “Connected as connection – $conn

\n”;

echo “Opening cursor …

\n”;

$cursor=ora_open($conn); printoraerr($cursor);

echo “Opened cursor – $cursor

\n”;

$qry=”select user,sysdate from dual”;

echo “Parsing the query $qry …

\n”;

ora_parse($cursor,$qry,0); printoraerr($cursor);

echo “Query parsed

\n”;

echo “Executing cursor …

\n”;

ora_exec($cursor); printoraerr($cursor);

echo “Executed cursor

\n”;

echo “Fetching cursor …

\n”;

while(ora_fetch($cursor))

{

$user=ora_getcolumn($cursor,0); printoraerr($cursor);

$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor);

echo ” row = $user, $sysdate

\n”;

}

echo “Fetched all records

\n”;

echo “Closing cursor …

\n”;

ora_close($cursor);

echo “Closed cursor

\n”;

echo “Logging off from oracle…

\n”;

ora_logoff($conn);

echo “Logged off from oracle

\n”;

?

(譯者註:以上代碼段缺少注釋,請讀者參考PHP Manual的Oracle數據庫函數部分)

4.3 顯示結果

以下代碼演示了怎樣查詢數據庫並將結果輸出:

function printoraerr($in_cur, $conn)

{

// 檢查Oracle是否出錯

// 如果存在錯誤則顯示

// 當指針被激活時每次請求Oracle後調用該函數

// If it encountered an error, we exit immediately

if(ora_errorcode($in_cur))

{

echo “Oracle code – “.ora_error($in_cur).”

n”;

ora_logoff($conn);

exit;

}

return;

}

function exequery($w_qry,$conn)

{

$cursor=ora_open($conn); printoraerr($cursor,$conn);

ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn);

ora_exec($cursor); printoraerr($cursor,$conn);

$numrows=0;

$w_numcols=ora_numcols($cursor);

// 顯示頭部

echo ”

\n”;

for ($i=0;$i$w_numcols;$i++)

{

$align=(ora_columntype($cursor,$i)==”NUMBER”)?”RIGHT”:”LEFT”;

echo “\t “.ora_columnname($cursor,$i).” \n”;

}

echo ”

\n”;

while(ora_fetch($cursor))

{

echo ” \n”;

for ($i=0;$i$w_numcols;$i++)

{

$align=(ora_columntype($cursor,$i)==”NUMBER”)?”RIGHT”:”LEFT”;

if(ora_columntype($cursor,$i)==”LONG”)

echo ” “.

ora_getcolumn($cursor,$i).”

\n”;

else

echo ” “.ora_getcolumn($cursor,$i).” \n”;

printoraerr($cursor,$conn);

}

$numrows++;

echo ”

\n”;

}

if ($numrows==0)

echo ” Query returned no records

\n”;

else

{

echo ” \n”;

echo ” Count \n”;

echo ” $numrows \n”;

echo ”

\n”;

}

echo ” \n”;

ora_close($cursor);

return;

}

// 主程序

if(!($conn=ora_logon(“user@SID”,”password”)))

{

echo “Error: Cannot connect to database\n”;

exit;

}

$qry=”SELECT

deptno \”Dept\”

,empno \”Emp\”

,empnm \”Name\”

,salary \”Salary\”

FROM

employee

ORDER BY 1,2″;

exequery($qry);

ora_logoff($conn);

?

(譯者註:以上代碼段缺少注釋,請讀者參考PHP Manual的Oracle數據庫函數部分)

4.4 基於HTTP的Oracle登錄

將以下代碼加在PHP頁面代碼之前以確認Oracle登錄。注意你必須正確設定$ SID。

if(!isset($PHP_AUTH_USER))

{

Header(“WWW-authenticate: basic realm=\”$SID\””);

Header(“HTTP/1.0 401 Unauthorized”);

$title=”Login Instructions”;

echo “

You are not authorized to enter the site

\n”;

exit;

}

else

{

if (!($conn=ora_logon(“$PHP_AUTH_USER@$SID”,$PHP_AUTH_PW)))

{

Header(“WWW-authenticate: basic realm=\”$SID\””);

Header(“HTTP/1.0 401 Unauthorized”);

$title=”Login Instructions”;

echo “

You are not authorised to enter the site

\n”;

exit;

}

}

?

最近兩年一直從事與金融相關項目的開發與維護。但是,關於 PHP 加密解密的最佳實踐,網上沒有人給出一個完美的總結。恰逢最近看了《圖解密碼技術》一書,對 PHP 加解密有了更深刻的認識。

為了避免各位看枯燥的文字理論,開篇我就把總結給出:

一、對稱加密

對稱加密的特點是加解密速度快,加密後的密文強度目前還沒有硬解的可能性。但是,在未來隨着計算機性能的提升有可能會出現被破解的可能性。

對稱加密的缺點也很明顯。對稱加密的加密過程與解密過程使用的是同一把密鑰。一旦泄漏密鑰,加密就失去了任何意義。

根據《圖解密碼技術》一書的推薦,對稱加密目前推薦使用 AES。在 PHP 當中要實現 AES 加解密,是使用 openssl 擴展來實現。所以,請確保你的 PHP 已經開啟了 openssl 擴展。

可以通過如下方式檢測:

或者如下方式檢測:

AES 的加密模式屬於分組密碼模式。所謂分組密碼,是加密時把明文按照固定的長度分組,然後再進行加密。當然,細節之處很很多不同。AES 分組模式有多種:ECB、CBC、CFB、OFB、CTR 五種分組模式。目前優先推薦使用 CBC 模式。

如果使用 CBC 模式,那麼在加密的時候,就需要一個前置的加密向量 IV。當初博主在使用 AES 來加密的時候,就很奇怪一個對稱加密為何要這個向量。因為,在博主寒冰的潛意識裡,對稱加密只需要一個密鑰就 Ok 了。沒想到 AES 加密還有多種模式,而這個 CBC 模式恰恰就需要一個這樣的向量值。關於這個向量大家可以在網上查閱相關的資料。這個東西非常重要,也非常好理解。

關於 PHP AES 加解密會用到的相關方法:

AES 支持三種強度:128、192、256。128 位的強度最低,但是,加密解密速度較快。256 位強度最高,但是,加密解密速度最低。所以,大家根據自己系統的重要程度選擇使用對應強度。通常普通的金融項目使用 192 位完整夠用了。頂級的就用 256 位。其他的就用 128 位吧。

二、非對稱加密

非對稱加密是指公鑰加密私鑰解密,私鑰加密公鑰解密的算法。非對稱加密的算法有很多。《圖解密碼技術》一書推薦使用 RSA 算法。它使用起來也非常簡單。

要使用 RSA 算法。首先,我們必須生成一對公鑰私鑰。其實生成公鑰私鑰很簡單。

在 Linux 系統,直接使用如下命令生成:

此命令會生 ~/.ssh/ 目錄下生成兩個文件:

id_rsa 是私鑰, is_rsa.pub 是公鑰。

關於 PHP RSA 加解密會用到的相關方法:

以上就是關於在 PHP 項目開發中,我們使用的加密解密算法的一個總結。博主寒冰在總結過程中難免會有不足之處,還請大家指正!謝謝!

初步判斷,密碼為yixiwangmengsicengjian

原理

if($LoginPassword!=”){ 表示$LoginPassword不能為空

而$LoginPassword 的值來自於$LoginPassword=$UserList[$LoginUser];

而$UserList這個數組只有一個元素, admin

那$UserList[$LoginUser] 只能是$UserList[‘admin’];

而很明顯$UserList[‘admin’] 的值就是 yixiwangmengsicengjian

表單方面, 一個輸入框, 一個密碼框, 輸入框的name屬性是User 密碼框的name屬性是 Password

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/126803.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Python暴力破解wifi密碼

    簡介:本文將從多個方面詳細介紹使用Python暴力破解wifi密碼的方法。代碼實例將被包含在本文中的相關小節中。 一、如何獲取wifi密碼 在使用Python暴力破解wifi密碼之…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Python 編寫密碼安全檢查工具

    本文將介紹如何使用 Python 編寫一個能夠檢查用戶輸入密碼安全強度的工具。 一、安全強度的定義 在實現安全檢查之前,首先需要明確什麼是密碼的安全強度。密碼的安全強度通常包括以下…

    編程 2025-04-27
  • jiia password – 保護您的密碼安全

    你是否曾經遇到過忘記密碼、密碼泄露等問題?jiia password 正是一款為此而生的解決方案。本文將從加密方案、密碼管理、多平台支持等多個方面,為您詳細闡述 jiia pass…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • Python解鎖Wi-Fi密碼

    想要解鎖Wi-Fi密碼,你需要使用Python編程語言。Python是一種高層次、面向對象、解釋型的動態編程語言。許多人都可以輕鬆學習Python,並用它來編寫各種各樣的程序。在本…

    編程 2025-04-27
  • Python隨機密碼生成代碼

    本文將會從以下幾個方面對Python隨機密碼生成代碼進行詳細闡述: 一、密碼生成原理 密碼生成的原理是利用隨機數生成器生成隨機字符或數字,根據一定的規則組合成所需要的密碼。 在Py…

    編程 2025-04-27

發表回復

登錄後才能評論