php數據加密及數據存儲和傳輸


一、前言

個人認為,PHP是世界上為數不多,最人性化的語言。

雖然是二次開發、弱類型語言,由C/C++編寫的PHP引擎去解析。但是,其代碼優雅性和其運行速度不亞於,其他編譯語言。

二、PHP數據加密

數據加密的類型有:

MD5、sha1、sha256、CRC32多項式冗余校驗等。

1. MD5、sha1、sha256


描述:hash加密算法,不可逆。常用於數據驗證與密碼驗證。

例如:

 

1 <?php
2 echo md5(md5('123456' . DX))

 

2. CRC32

描述:多項冗余校驗,不可逆。常用於校驗數據的完整性,可用於校驗目標文件是否修改。

例如:

1 <?php
2 $file = realpath('main.js') . filemtime(realpath('main.js') );
3 echo printf("%x", crc32($file));

注:

因為PHP數值底層存儲都是帶符號的,這里把值處理成16進制。

如果,main.js文件被修改,則輸出結果也會變化;

3. base64_encode和base64_decode

描述:數據壓縮加密,可逆。常用於數據加密、傳輸。通常和strtr函數一起使用。

例如:

1 <?php  
2   $tr = 'www.baidu.com';
3   echo base64_encode($tr);   
4   echo '<hr />';
5   echo strtr(base64_encode($tr), 'c=Z', '-_/');
6   echo '<hr />';
7   $rtr = strtr(base64_encode($tr), '-_', 'c=z');

strtr函數描述:

詳情請查看php.net

簡單介紹:字符串替換。

4. password_hash、password_valid

描述:哈希加密,不可逆。常用於數據加密和認證。

例如:

 

1 //算法遞歸層數
2 $cost = 4;
3 //鹽值
4 $salt = '1234567891234567891234';
5 //指定鹽值 最小值22; 指定算法遞歸層數 最小值4 最大值 25
6 echo password_hash('123456', PASSWORD_DEFAULT, ['cost' => $cost, 'salt' => $salt]);
7 echo '<hr />';
8 echo password_verify('123456', '$2y$06$KfKrG52XutkMN9DcGeczVOVqGCDtMYWHk5BaqH/nu0tX/jjqhTGgO');

 

解析:

password_hash()

參數一:加密字符串

參數二:加密hash算法,PASSWORD_DEFAULT為默認bcrypt哈希算法。其他關於更多的算法,請百度搜索自行了解一下。

參數三:選項。數組類型,數組元素可選。

cost hash算法遞歸層數。

salt 哈希算法,加入的鹽值,即:干擾字符。

PHP7.0建議,參數二、參數三都為默認值。

password_valid()

hash驗證。

三、計算機底層數據存儲和傳輸

一、計算機底層數據存儲unicode編碼。

a、計算機數據傳輸為UTF-8編碼格式。

b、strlen對存儲數據以UTF-8形式轉碼解析,並以8bit為一個byte進行計算字符單位長度。

c、mb_strlen() 對存儲數據以UTF-8形式轉碼,其參數二為可指定參數。UTF-8、unicode、8bit,默認為UTF-8解析字符單位長度。若計算漢字字符,指定參數二為UTF-8,則該函數以UTF-8計算該字符長度,比如:“代碼”,則是兩個字節長度。

在unicode協議中,一個中文漢字為2byte。UTF-8協議中一個中文漢字為3byte。所以參數二指定為unicode時,則 “代碼” 這串字符為三個單位長度。

四、總結

a. 如果我們做web應用,用於客戶端登陸注冊驗證時,我們可以用MD5、sha1、sha256、password_hash、password_valid等哈希加密驗證。

b. 如果我們讓目標文件隨源文件的更改而改變,那么我們就可以使用CRC32對數據進行加密,生成目標文件。

c. 計算機底層數據存儲在Unicode時代,則所有字符都以兩個字節存儲,那么如果是單字節字符,則補位0。那么UTF-8就作為傳輸數據的數據編碼格式出現在計算機的舞台。我們的PHP底層函數解析,都是以UTF-8的編碼協議解析。在Unicode中一個中文漢字為2byte。而UTF-8中,一個中文漢字為3byte 。

參考文獻:

https://www.cnblogs.com/leesf456/p/5317574.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM