PHP加密函式—md5()函式加密實體用法
MD5()函式是計算器字串的 MD5散列值,使用MD5的演算法,MD5的全稱是Message-Digest Algorithm 5,它的作用是把不同長度的資料資訊經過一系列的演算法計算成一個 128 位的數值,就是把一個任意長度的位元組串變成一定長的大整數,注意這里說的是“位元組串”,而不是“字串”,因為這種變換只與位元組的值有關系,與字符集或者編碼方式并無關,
第二個引數如果設定為true,那么函式就會回傳一個二進制形式的密文,該引數默認為 false,
在很多的網站中,注冊用戶名的密碼都是使用 MD5加密,然后再保存到資料庫的,用戶名登錄的時候,程式把用戶輸入的密碼算成MD5值,然后再去和資料庫中保存的MD5值進行比較,在這個程序中呢,程式自身都不會“知道”用戶的真實密碼,從而保證了注冊用戶的個人隱私,提高了安全性,
下面實體實作注冊和登錄的功能,通過MD5加密后,保存資料庫,具體步驟如下:
第一步:創建conn.php檔案,完成與資料庫的鏈接:
<?php header("Content-Type:text/html;charset=utf-8"); $conn = mysqli_connect('localhost','root','123456') or die('資料庫連接失敗'.mysqli_error()); mysqli_select_db($conn,'tp5'); mysqli_query($conn,'set name utf-8');
第二步:就是創建register.php檔案,模擬獲取到表單中的資料,通過MD5()函式對密碼進行加密,使用面向物件的方法完成,參考代碼如下:
<?php header("Content-Type:text/html;charset=utf-8"); class CHECKUSER{ var $name; var $pwd; function __construct($x,$y){ $this->name = $x; $this->pwd = $y; } function checkinput(){ include 'conn.php'; $info = mysqli_query($conn,'insert into user(username,password) value("'.$this->name.'","'.md5($this->pwd).'")'); if($info == false){ echo "<script>alert('會員注冊失敗');history.back();</script>"; exit(); }else{ $_SESSION['admin_name'] = $this->name; echo "<script>alert('會員注冊成功');window.location.href='https://www.cnblogs.com/chenyingying0/p/demo.php';</script>"; } } } $_POST['name'] = 'cyy2'; $_POST['password'] = '123'; $obj = new CHECKUSER(trim($_POST['name']),trim($_POST['password'])); $obj->checkinput();
完成以后可以在資料庫查看加密過后的密碼!
PHP加密函式—sha1()函式加密的實體用法
sha的全稱是:Secure Hash Algorithm(安全哈希演算法)主要適用于數字簽名標準 (Digital Signature Standard DSS)里面定義的數字簽名演算法(Digital Signature Algorithm DSA),對于長度小于2^64位的訊息,SHA1會產生一個160位的訊息摘要,當接收到訊息的時候,這個訊息摘要可以用來驗證資料的完整性,在傳輸的程序中,資料很可能會發生變化,那么這時候就會產生不同的訊息摘要,PHP提供的sha1()函式使用的就是SHA 演算法!
函式回傳一個 40位的十六進制數,如果引數 raw_output 為 true,那么就會回傳一個 20位的二進制數,默認是 raw_output 是為 false,
在這里要著重的說明下:
sha后面的 1 是阿拉伯數字(123456)里的 1 ,不是字母l(L),很多人都會看成是字母,但是它是阿拉伯數字,這里大家一定要注意,不要搞錯了!
<?php header("Content-Type:text/html;charset=utf-8"); $str = 'cyy'; echo 'true--原始20字符二進制格式:'.sha1($str,TRUE).'<br>'; echo 'false--40字符十六進制格式:'.sha1($str).'<br>';
輸出結果為:

下面實體是輸出 sha1() 的結果并對其進行測驗:
<?php header("Content-Type:text/html;charset=utf-8"); $str = 'cyy'; echo 'false--40字符十六進制格式:'.sha1($str).'<br>'; if(sha1($str) == 'f1ff58f24616c02df26e8d8393887364bfb4b486'){ echo 'i love cyy'; exit; }
輸出結果為:

下面實體是MD5 和SHA 加密運算對比,具體帶代碼如下:
<?php header("Content-Type:text/html;charset=utf-8"); $str = 'cyy'; echo 'sha1:'.sha1($str).'<br>'; echo 'md5:'.md5($str).'<br>';
輸出結果為:

PHP加密函式—crypt()函式加密用法實體
資料加密原理:就是對原來的明檔案或者資料按照某種演算法進行處理,使其成為不可讀的一段代碼,通常稱之為“密文”,通過這樣的途徑來達到保護資料不被非法竊取和閱讀的目的!
在PHP中能對資料進行加密的函式主要有:crypt()、md5()以及sha1(),還有就是加密擴展庫Mcrpyt和Mash,
crypt()函式可以完成單向加密功能,是單向字串散列
在默認的情況下,PHP使用一個或者兩個字符的 DES 干擾串,如果系統使用的是MD5,那么就會使用 12個字符,可以通過 CRYPT_SALT_LENGTH 變數來查看當前所使用的干擾串的長度!
<?php header("Content-Type:text/html;charset=utf-8"); $str = 'cyy'; echo '加密前:'.$str.'<br>'; echo '加密后:'.crypt($str).'<br>';
輸出的結果如下:

上面的實體執行之后,一直重繪瀏覽器,你會發現每次生成的加密結果都是不一樣的,那么該如何進行對加密后的資料進行判斷就成了問題,crypt()函式是單向加密的,密文不可還原成明文的,而且每次加密后的資料都是不同的,這就是 salt 引數要解決的問題了,
crypt()函式用 salt引數對明文進行加密,判斷時,對輸出的資訊再次使用相同的 salt 引數進行加密,對比兩次加密后的結果來進行判斷!
下面的實體對輸入用戶名進行檢查,具體代碼如下:
<?php header("Content-Type:text/html;charset=utf-8"); include 'conn.php'; ?> <form name="form1" action="#" method="post"> <input type="text" name="username" id="username" size="15"> <input type="submit" name="Submit" value="https://www.cnblogs.com/chenyingying0/p/檢測"> </form> <?php if(isset($_POST['username']) != ''){ $user = crypt(isset($_POST['username']),'cyy'); $sql = "select * from user where username = '".$user."'"; $res = mysqli_query($conn,$sql); if($res){ echo '用戶名已存在'; }else{ echo '用戶名可用'; } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40942.html
標籤:PHP
上一篇:面向物件實體操作
下一篇:Yii2中Console定時任務
