php實現加密的幾種方式,php實現加密的幾種方式

本文目錄一覽:

php excel加密的實現方法有什麼

PHP中的加密方式有如下幾種

1. MD5加密

string md5 ( string $str [, bool $raw_output = false ] )

參數

str — 原始字元串。

raw_output — 如果可選的 raw_output 被設置為 TRUE,那麼 MD5 報文摘要將以16位元組長度的原始二進位格式返回。

這是一種不可逆加密,執行如下的代碼

$password = 『123456『;

echo md5($password);

得到結果是e10adc3949ba59abbe56e057f20f883e

2. Crype加密

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

crypt() 返回一個基於標準 UNIX DES 演算法或系統上其他可用的替代演算法的散列字元串。

參數

str — 待散列的字元串。

salt — 可選的鹽值字元串。如果沒有提供,演算法行為將由不同的演算法實現決定,並可能導致不可預料的結束。

這是也一種不可逆加密,執行如下的代碼

代碼如下:

$password = 『123456『;

$salt = “test”;// 只取前兩個

echo crypt($password, $salt);

得到的結果是teMGKvBPcptKo

使用自動鹽值的例子如下:

代碼如下:

$password = crypt(『mypassword『); // 自動生成鹽值

/* 你應當使用 crypt() 得到的完整結果作為鹽值進行密碼校驗,以此來避免使用不同散列演算法導致的問題。(如上所述,基於標準 DES 演算法的密碼散列使用 2 字元鹽值,但是基於 MD5 演算法的散列使用 12 個字元鹽值。)*/

if (crypt(『mypassword『, $password) == $password) {

echo “Password verified!”;

}

執行結果是輸出 Password verified!

以不同散列類型使用 crypt()的例子如下:

代碼如下:

if (CRYPT_STD_DES == 1) {

echo 『Standard DES: 『 . crypt(『rasmuslerdorf『, 『rl『) . “\n”;

}

if (CRYPT_EXT_DES == 1) {

echo 『Extended DES: 『 . crypt(『rasmuslerdorf『, 『_J9..rasm『) . “\n”;

}

if (CRYPT_MD5 == 1) {

echo 『MD5: 『 . crypt(『rasmuslerdorf『, 『$1$rasmusle$『) . “\n”;

}

if (CRYPT_BLOWFISH == 1) {

echo 『Blowfish: 『 . crypt(『rasmuslerdorf『, 『$2a$07$usesomesillystringforsalt$『) . “\n”;

}

if (CRYPT_SHA256 == 1) {

echo 『SHA-256: 『 . crypt(『rasmuslerdorf『, 『$5$rounds=5000$usesomesillystringforsalt$『) . “\n”;

}

if (CRYPT_SHA512 == 1) {

echo 『SHA-512: 『 . crypt(『rasmuslerdorf『, 『$6$rounds=5000$usesomesillystringforsalt$『) . “\n”;

}

其結果如下

Standard DES: rl.3StKT.4T8M

Extended DES: _J9..rasmBYk8r9AiWNc

MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0

Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi

SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6

SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

在 crypt() 函數支持多重散列的系統上,下面的常量根據相應的類型是否可用被設置為 0 或 1:

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 的數字值將被用來指定散列循環的執行次數,這點很像 Blowfish 演算法的 cost 參數。默認的循環次數是 5000,最小是 1000,最大是 999,999,999。超出這個範圍的 N 將會被轉換為最接近的值。

CRYPT_SHA512 – SHA-512 演算法使用一個以 $6$ 開頭的 16 字元字元串鹽值進行散列。如果鹽值字元串以 「rounds=$」 開頭,N 的數字值將被用來指定散列循環的執行次數,這點很像 Blowfish 演算法的 cost 參數。默認的循環次數是 5000,最小是 1000,最大是 999,999,999。超出這個範圍的 N 將會被轉換為最接近的值。

3. Sha1加密

string sha1 ( string $str [, bool $raw_output = false ] )

參數

str — 輸入字元串。

raw_output — 如果可選的 raw_output 參數被設置為 TRUE,那麼 sha1 摘要將以 20 字元長度的原始格式返回,否則返回值是一個 40 字元長度的十六進位數字。

這是也一種不可逆加密,執行如下代碼:

$password = 『123456『;

echo sha1($password);

得到的結果是7c4a8d09ca3762af61e59520943dc26494f8941b

以上幾種雖然是不可逆加密,但是也可以根據查字典的方式去解密。如下的地址中就提供了可以將上面的加密結果解密出來的功能。

那大家是不是加了就算加了密,也沒用啊,其實不然,只要你的加密足夠複雜,被破解出的可能性就越小,比如用以上三種加密方式混合加密,之後我會推薦給大家一個php的加密庫。

4. URL加密

string urlencode ( string $str )

此函數便於將字元串編碼並將其用於 URL 的請求部分,同時它還便於將變數傳遞給下一頁。

返回字元串,此字元串中除了 -_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進位數,空格則編碼為加號(+)。此編碼與 WWW 表單 POST 數據的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣。由於歷史原因,此編碼在將空格編碼為加號(+)方面與 RFC1738 編碼不同。

string urldecode ( string $str )

解碼給出的已編碼字元串中的任何 %##。 加號(『+『)被解碼成一個空格字元。

這是一種可逆加密,urlencode方法用於加密,urldecode方法用於解密,執行如下代碼:

$url = 『『;

$encodeUrl = urlencode($url);

echo $encodeUrl . “\n”;// 如果是在網頁上展示的,就將\n修改為

echo urldecode($encodeUrl);

得到的結果如下

http%3A%2F%2F

基於RFC 3986的加密URL的方法如下:

代碼如下:

function myUrlEncode($string) {

$entities = array(『%21『, 『%2A『, 『%27『, 『%28『, 『%29『, 『%3B『, 『%3A『, 『%40『, 『%26『, 『%3D『, 『%2B『, 『%24『, 『%2C『, 『%2F『, 『%3F『, 『%25『, 『%23『, 『%5B『, 『%5D『);

$replacements = array(『!『, 『*『, “『”, “(“, “)”, “;”, “:”, “@”, “”, “=”, “+”, “$”, “,”, “/”, “?”, “%”, “#”, “[“, “]”);

return str_replace($entities, $replacements, urlencode($string));

}

5. Base64信息編碼加密

string base64_encode ( string $data )

使用 base64 對 data 進行編碼。

設計此種編碼是為了使二進位數據可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的主體。

Base64-encoded 數據要比原始數據多佔用 33% 左右的空間。

string base64_decode ( string $data [, bool $strict = false ] )

對 base64 編碼的 data 進行解碼。

參數

data — 編碼過的數據。

strict — 如果輸入的數據超出了 base64 字母表,則返回 FALSE。

執行如下代碼:

代碼如下:

$name = 『CraryPrimitiveMan『;

$encodeName = base64_encode($name);

echo $encodeName . “\n”;

echo base64_decode($encodeName);

其結果如下

代碼如下:

Q3JhcnlQcmltaXRpdmVNYW4=

CraryPrimitiveMan

推薦phpass

經 phpass 0.3 測試,在存入資料庫之前進行哈希保護用戶密碼的標準方式。 許多常用的哈希演算法如 md5,甚至是 sha1 對於密碼存儲都是不安全的, 因為駭客能夠使用那些演算法輕而易舉地破解密碼。

對密碼進行哈希最安全的方法是使用 bcrypt 演算法。開源的 phpass 庫以一個易於使用的類來提供該功能。

代碼如下:

?php

// Include phpass 庫

require_once(『phpass-03/PasswordHash.php『)

// 初始化散列器為不可移植(這樣更安全)

$hasher = new PasswordHash(8, false);

// 計算密碼的哈希值。$hashedPassword 是一個長度為 60 個字元的字元串.

$hashedPassword = $hasher-HashPassword(『my super cool password『);

// 你現在可以安全地將 $hashedPassword 保存到資料庫中!

// 通過比較用戶輸入內容(產生的哈希值)和我們之前計算出的哈希值,來判斷用戶是否輸入了正確的密碼

$hasher-CheckPassword(『the wrong password『, $hashedPassword); // false

$hasher-CheckPassword(『my super cool password『, $hashedPassword); // true

?

PHP如何對用戶密碼進行加密

PHP如何對用戶密碼進行加密

第一種方法:可以使用如下方法對用戶密碼進行加密:MySqlSET user@」localhost」 PASSWORD=PASSWORD(」Password」);

第二種方法:可以使用MYSQL的 PASSWORD函數進行用戶密碼的加密。例如:Insert into user(password, ……..) values (PASSWORD(」$password」,………));

可以在一個PHP文件裡面include另外一個PHP文件兩次嗎

是的,可以在一個PHP文件裡面include另外一個PHP文件兩次,被include的那個php文件也會執行兩次,所以如果在這個文件裡面定義的有一個class, 就會報出the class already defined的錯誤。

mysql的最長資料庫名,表名,欄位名可以是多長

資料庫名字最長為64

數據表名字最長為64

欄位名字最長為64

mysql_pconnect()和mysql_connect()有什麼區別

兩者的區別主要有兩個:

1. 在進行資料庫連接時,函數會先找同一個host, 用戶和密碼的persistent(持續的)的’鏈接,如果能找到,則使用這個鏈接而不返回一個新的鏈接。

2. mysql_pconnect()創建的資料庫連接在腳本執行完畢後仍然保留,可以被後來的代碼繼續使用,mysql_close()函數也不會關閉mysql_pconnect()創建的鏈接。

;

PHP常用加密解密方法

作者/上善若水

1.md5(string $str,bool $flag = false);

$flag = false 默認返回32位的16進至數據散列值

$flag = true  返回原始流數據

2.sha1($string,$flag = false)

$flag = false 默認返回40位的16進至數據散列值

true  返回原始流數據

3.hash(string $algo,srting $str,bool $flag);

$algo : 演算法名稱,可通過hash_algos()函數獲取所有hash加密的演算法

如:md5,sha1等,採用md5,sha1加密所得結果和1,2兩種方式結 果相同。

$flag = false 默認返回16進至的數據散列值,具體長度根據演算法不同

而不同。

true  返回原始流數據。

4.crypt(string $str,$string $salt);

函數返回使用 DES、Blowfish 或 MD5 演算法加密的字元串。

具體演算法依賴於PHP檢查之後支持的演算法和$salt的格式和長度,當 然具體結果也和操作系統有關。比較結果採用 hash_equals($crypted,crypt($input,$salt));//且salt值相同

Password_verify($str,$crypted);

5.password_hash ( string $str, integer $algo [, array $options ] )

函數返回哈希加密後的密碼字元串, password_hash() 是crypt()的 一個簡單封裝

$algo : 演算法 PASSWORD_DEFAULT ,PASSWORD_BCRYPT

$options = [

「cost」=10,//指明演算法遞歸的層數,

「salt」=「xxadasdsad」//加密鹽值,即將被遺 棄,採用系統自動隨機生成安全性更高

];

使用的演算法、cost 和鹽值作為哈希的一部分返回

Password_verify($str,$hashed);

6.base64_encode(string $str)

設計此種編碼是為了使二進位數據可以通過非純 8-bit 的傳輸層 傳輸,例如電子郵件的主體。base64_decode(string $encoded)

可以進行解碼;

7.mcrypt_encrypt ( string $cipher , string $key , string $data ,

string $mode [, string $iv ] )

mcrypt_decrypt ( string $cipher , string $key , string $crypted ,

string $mode [, string $iv ] )

$ciper:加密演算法,mcrypt_list_algorithms()可以獲取該函數所有支持的演算法

如MCRYPT_DES(「des」),MCRYPT_RIJNDAEL_128(「rijndael-128」);

$mode : 加密模式 ,mcrypt_list_modes()獲取所有支持的加密模式,ecb,cbc

$key: 加密的秘鑰,mcrypt_get_key_size ( string $cipher , string $mode )

獲取指定的演算法和模式所需的密鑰長度。$key要滿足這個長度,如果長 度無效會報出警告。

$iv : 加密的初始向量,可通過mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_URANDOM ] ),

Iv的參數size:

通過mcrypt_get_iv_size ( string $cipher , string $mode )獲取

Iv 的參數source:

初始向量數據來源。可選值有: MCRYPT_RAND (系統隨機數生成 器), MCRYPT_DEV_RANDOM (從 /dev/random 文件讀取數據) 和  MCRYPT_DEV_URANDOM (從 /dev/urandom 文件讀取數據)。 在 Windows 平台,PHP 5.3.0 之前的版本中,僅支持 MCRYPT_RAND。

請注意,在 PHP 5.6.0 之前的版本中, 此參數的默認值 為 MCRYPT_DEV_RANDOM。

Note: 需要注意的是,如果沒有更多可用的用來產生隨機數據的信息, 那麼 MCRYPT_DEV_RANDOM 可能進入阻塞狀態。

$data : 要加密的字元串數據

各位用php將密碼存入資料庫,都用什麼方法進行加密的

php將密碼存入資料庫,可以分內常見的4種方式:

1、直接md5加密存到到資料庫

2、md5兩次存到資料庫

3、對需要加密的字元串和一個常量 進行混淆加密

4、生成一個隨機的變數存到資料庫中,然後對需要加密的字元串和這個隨機變數加密

?php$str=”admin”; //需要加密的字元串$str2=”php”; //增加一個常量混淆 $pass1=md5($str);$pass2=md5(md5($str));$pass3=md5($str.$str2);echo $pass1.”br”.$pass2.”br”.$pass3;?

輸出:

第四種

$str=”admin”; //需要加密的字元串$encrypt=$row[‘encrypt’]; // 生成的 隨機加密字元串 存到資料庫中$pass4=md5($str.$encrypt);// 8db2ec7e9636f124e56f7eb4d7b7cc7e

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/295261.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 17:15
下一篇 2024-12-26 17:15

相關推薦

  • PHP和Python哪個好找工作?

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

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

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

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網路應用中流…

    編程 2025-04-29
  • Python數據類型分為哪幾種

    Python作為一門非常靈活的編程語言,有著非常豐富的數據類型。Python的數據類型可以分為數字類型、字元串類型、列表類型、元組類型、字典類型和集合類型六種。 一、數字類型 Py…

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

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

    編程 2025-04-28
  • Python在線編輯器的優勢與實現方式

    Python在線編輯器是Python語言愛好者的重要工具之一,它可以讓用戶方便快捷的在線編碼、調試和分享代碼,無需在本地安裝Python環境。本文將從多個方面對Python在線編輯…

    編程 2025-04-28
  • Java表單提交方式

    Java表單提交有兩種方式,分別是get和post。下面我們將從以下幾個方面詳細闡述這兩種方式。 一、get方式 1、什麼是get方式 在get方式下,表單的數據會以查詢字元串的形…

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

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

    編程 2025-04-27
  • 用Pythonic的方式編寫高效代碼

    Pythonic是一種編程哲學,它強調Python編程風格的簡單、清晰、優雅和明確。Python應該描述為一種語言而不是一種編程語言。Pythonic的編程方式不僅可以使我們在編碼…

    編程 2025-04-27
  • Java多版本支持實現方式

    本文將從以下幾個方面闡述如何實現Java多版本支持,並給出可行的代碼示例。 一、多版本Java環境概述 Java是一門跨平台的編程語言,但是在不同的應用場景下,可能需要使用不同版本…

    編程 2025-04-27

發表回復

登錄後才能評論