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

1、前言php

我的認爲,PHP是世界上爲數很少,最人性化的語言。html

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

2、PHP數據加密算法

數據加密的類型有:數組

MD五、sha一、sha25六、CRC32多項式冗餘校驗等。函數

1. MD五、sha一、sha256編碼


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

例如:spa

 

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

 

2. CRC32.net

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

例如:

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建議,參數2、參數三都爲默認值。

password_valid()

hash驗證。

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

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

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

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

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

在unicode協議中,一箇中文漢字爲2byte。UTF-8協議中一箇中文漢字爲3byte。因此參數二指定爲unicode時,則 「代碼」 這串字符爲三個單位長度。

4、總結

a. 若是咱們作web應用,用於客戶端登錄註冊驗證時,咱們能夠用MD五、sha一、sha25六、password_hash、password_valid等哈希加密驗證。

b. 若是咱們讓目標文件隨源文件的更改而改變,那麼咱們就能夠使用CRC32對數據進行加密,生成目標文件。

c. 計算機底層數據存儲在Unicode時代,則全部字符都以兩個字節存儲,那麼若是是單字節字符,則補位0。那麼UTF-8就做爲傳輸數據的數據編碼格式出如今計算機的舞臺。咱們的PHP底層函數解析,都是以UTF-8的編碼協議解析。在Unicode中一箇中文漢字爲2byte。而UTF-8中,一箇中文漢字爲3byte 。

參考文獻:

http://www.javashuo.com/article/p-axnhjzqz-mr.html

相關文章
相關標籤/搜索