crypt()函數


數據加密

數據加密利用密碼技術對信息進行加密,實現信息的隱蔽,從而起到保護信息安全的作用。它通過加密算法和加密秘鑰將原來是明文的文件或數據進行處理,使其成文不可讀的一段代碼,也就是所謂的“密文”,來達到保護數據的安全性。

Crypt()函數

crypt()函數返回使用DES、Blowfish或MD5算法加密的字符串。在不同的操作系統上,crypt()函數的行為不同,某些操作系統支持一種以上的算法類型。在安裝時,PHP回憶檢查什么算法可用以及使用什么算法。

crypt()函數的語法:

string crypt(string str[,string salt]);

參數str:必需。是需要加密的字符串。

參數salt:可選。用於增加被加密字符數目的字符串(干擾串),以使字符更加安全。若沒有提供salt參數,每次調用該函數時會隨機生成一個干擾串。

crypt()函數的算法:

[CRYPT_SALT_LENGTH] 默認的加密長度。使用標准的 DES 加密,長度為 2
[CRYPT_STD_DES] 基於標准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的兩個字符作為鹽值。在鹽值中使用非法的字符將導致 crypt() 失敗。
[CRYPT_EXT_DES] 擴展的基於 DES 算法的散列。其鹽值為 9 個字符的字符串,由 1 個下划線后面跟着 4 字節循環次數和 4 字節鹽值組成。它們被編碼成可打印字符,每個字符 6 位,有效位最少的優先。0 到 63 被編碼為 "./0-9A-Za-z"。在鹽值中使用非法的字符將導致 crypt() 失敗。
[CRYPT_MD5] MD5 散列使用一個以 $1$ 開始的 12 字符的字符串鹽值。
[CRYPT_BLOWFISH] Blowfish 算法使用如下鹽值:“$2a$”,一個兩位 cost 參數,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符組合而成的字符串。在鹽值中使用此范圍之外的字符將導致 crypt() 返回一個空字符串。兩位 cost 參數是循環次數以 2 為底的對數,它的范圍是 04-31,超出這個范圍將導致 crypt() 失敗。
CRYPT_SHA256 SHA-256 算法使用一個以 $5$ 開頭的 16 字符字符串鹽值進行散列。如果鹽值字符串以 “rounds=<N>$” 開頭,N 的數字值將被用來指定散列循環的執行次數,這點很像 Blowfish 算法的 cost 參數。默認的循環次數是 5000,最小是 1000,最大是 999,999,999。超出這個范圍的 N 將會被轉換為最接近的值。
CRYPT_SHA512 SHA-512 算法使用一個以 $6$ 開頭的 16 字符字符串鹽值進行散列。如果鹽值字符串以 “rounds=<N>$” 開頭,N 的數字值將被用來指定散列循環的執行次數,這點很像 Blowfish 算法的 cost 參數。默認的循環次數是 5000,最小是 1000,最大是 999,999,999。超出這個范圍的 N 將會被轉換為最接近的值。

在該函數支持多種算法的系統上,如果支持上述常量則設置為 "1",否則設置為 "0"。

<?php
         $str="This is example";   
         echo '加密前的值為:'.$str;
         $crypttostr=crypt($str);
         echo '<p>加密后$str的值為:'.$crypttostr;
 ?>

運行結果如圖顯示:

從兩幅運行結果圖可以發現,刷新之后生成的加密結果都不相同,這就對加密后的數據進行判斷就成了一個問題。而我們也知道crypt()函數是單向函數,密文不可以還原成明文。且每次加密后的數據都不相同,這就是salt參數要解決的問題。crypt()函數用salt參數對明文進行加密,判斷時,對輸出的信息再次使用相同的salt參數進行加密,對比兩次加密后結果的判斷。

 注:crypt()函數沒有相應的解碼函數,它是一種單向加密函數。


免責聲明!

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



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