當前位置:首頁 » 密碼管理 » php登錄密碼加密

php登錄密碼加密

發布時間: 2023-04-18 20:14:28

1. 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 : 要加密的字元串數據

2. php 登錄注冊用哈希加密怎麼做

//加密

$hash_password = hash_password($password, PASSWORD_DEFAULT);

//驗證

if (password_verify($password, $hash_password)) {

//密碼正確

} else {

//密碼錯誤

}

3. php賬號密碼什麼加密方式比較好

一般使用非對稱睜唯慎加密,32位 md5足夠了。
當驗證密山慧碼對不對時,使用密碼明文 md5加密後與密文對比,一致則說悉敬明密碼是對的

4. 用php寫會員注冊 密碼加密問題

數據肢信瞎被截獲是無法避免的,除非用SSL加密。
比較安全的方法坦賀可以這樣:
1. 數據正常提交至lr.php
2. 獲取一個當前時間time()
3. 將密碼組合time()後md5
4. 將組合後的密碼md5值和歷空之前獲取的time()一起存入資料庫

當今後需要登錄時首先獲取用戶名對應的time(),再組合上密碼進行md5,和資料庫內的密碼md5對比。

5. thinkphp 後台登陸密碼加密傳入密鑰

後台登陸密碼加密讓敏驗證設置:

相關函數核攜:

控制器方坦氏枝法:

6. php密碼加密問題

老外寫的,我上學那會研究了一個星期,現在早忘扒明陸光了。還是拿來主義好!
<?php

function aes128cbcEncrypt($key, $text) {
/* Open the cipher */
$td = mcrypt_mole_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if (! $td) {
throw new GeneralSecurityException('Invalid mcrypt cipher, check your libmcrypt library and php-mcrypt extention');
}
// replaced MCRYPT_DEV_RANDOM with MCRYPT_RAND since windows doesn't have /dev/rand :)
srand((double)microtime() * 1000000);
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
/* Intialize encryption */
mcrypt_generic_init($td, $key, $iv);
/* Encrypt data */
$encrypted = mcrypt_generic($td, $text);
/* Terminate encryption handler */
mcrypt_generic_deinit($td);
/*
* AES-128-CBC encryption. The IV is returned as the first 16 bytes
* of the cipher text.
*/
return $iv . $encrypted;
}

function aes128cbcDecrypt($key, $encrypted_text) {
/槐緩* Open the cipher */春頃
$td = mcrypt_mole_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if (is_callable('mb_substr')) {
$iv = mb_substr($encrypted_text, 0, Crypto_CIPHER_BLOCK_SIZE, 'latin1');
} else {
$iv = substr($encrypted_text, 0, Crypto_CIPHER_BLOCK_SIZE);
}
/* Initialize encryption mole for decryption */
mcrypt_generic_init($td, $key, $iv);
/* Decrypt encrypted string */
if (is_callable('mb_substr')) {
$encrypted = mb_substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE, mb_strlen($encrypted_text, 'latin1'), 'latin1');
} else {
$encrypted = substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE);
}
$decrypted = mdecrypt_generic($td, $encrypted);
/* Terminate decryption handle and close mole */
mcrypt_generic_deinit($td);
mcrypt_mole_close($td);
/* Show string */
return trim($decrypted);
}
define('Crypto_CIPHER_BLOCK_SIZE',16);
$pass = '123456';//你的密碼
$text = 'this is text';//隨便的點文字 生成密鑰用
$a= aes128cbcEncrypt($pass,$text);
echo base64_encode($a)."/r/n";
$b= aes128cbcDecrypt($pass,$a);
echo $b."/r/n";
$c= aes128cbcDecrypt($pass,base64_decode(base64_encode($a)));//最終密鑰 $c
echo $c."/r/n";
?>

7. PHP怎麼處理密碼

在使用PHP開發Web應用的中,很多的應用都會要求用戶注冊,而注冊的時候就需要我們對用戶的信息進行處理了,最常見的莫過於就是郵箱和密碼了,本文意在討論對密碼的處理:也就是對密碼的加密處理。
MD5
相信很多PHP開發者在最先接觸PHP的時候,處理密碼的首選加密函數可能就是MD5了,我當時就是這樣的:
$password = md5($_POST["password"]);
上面這段代碼是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受歡迎了,因為它的加密演算法實在是顯得有點簡單了,而且很多破解密碼的站點都存放了很多經過MD5加密的密碼字元串,所以這里我是非常不提倡還在單單使用MD5來加密用戶的密碼的。
SHA256 和 SHA512
其實跟前面的MD5同期的還有一個SHA1加密方式的,不過也是演算法比較簡單,所以這里就一筆帶過吧。而這里即將要說到的 SHA256 和 SHA512 都是來自於SHA2家族的加密函數,看名字可能你就猜的出來了,這兩個加密方式分別生成256和512比特長度的hash字串。
他們的使用方法如下:
$password = hash("sha256", $password);
PHP內置了 hash() 函數,你只需要將加密方式傳給 hash() 函數就好了。你可以直接指明 sha256 , sha512 , md5 , sha1 等加密方式。
鹽值
在加密的過程,我們還有一個非常常見的小夥伴:鹽值。對,我們在加密的時候其實會給加密的字元串添加一個額外的字元串,以達到提高一定安全的目的:
function generateHashWithSalt($password) {
$intermediateSalt = md5(uniqid(rand(), true));
$salt = substr($intermediateSalt, 0, 6);
return hash("sha256", $password . $salt);
}
Bcrypt
如果讓我來建議一種加密方式的話, Bcrypt 可能是我給你推薦的最低要求了,因為我會強烈推薦你後面會說到的 Hashing API ,不過 Bcrypt 也不失為一種比較不錯的加密方式了。
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
return crypt($password, $salt);
}
}
Bcrypt 其實就是 Blowfish 和 crypt() 函數的結合,我們這里通過CRYPT_BLOWFISH 判斷 Blowfish 是否可用,然後像上面一樣生成一個鹽值,不過這里需要注意的是, crypt() 的鹽值必須以 $2a$ 或者 $2y$ 開頭,詳細資料可以參考下面的鏈接:
http://www.php.net/security/crypt_blowfish.php
更多資料可以看這里:
http://php.net/manual/en/function.crypt.php
Password Hashing API
這里才是我們的重頭戲, Password Hashing API 是PHP 5.5之後才有的新特性,它主要是提供下面幾個函數供我們使用:
password_hash() – 對密碼加密.
password_verify() – 驗證已經加密的密碼,檢驗其hash字串是否一致.
password_needs_rehash() – 給密碼重新加密.
password_get_info() – 返回加密演算法的名稱和一些相關信息.
雖然說 crypt() 函數在使用上已足夠,但是 password_hash() 不僅可以使我們的代碼更加簡短,而且還在安全方面給了我們更好的保障,所以,現在PHP的官方都是推薦這種方式來加密用戶的密碼,很多流行的框架比如 Laravel 就是用的這種加密方式。
$hash = password_hash($passwod, PASSWORD_DEFAULT);
對,就是這么簡單,一行代碼,All done。
PASSWORD_DEFAULT 目前使用的就是 Bcrypt ,所以在上面我會說推薦這個,不過因為 Password Hashing API 做得更好了,我必須鄭重地想你推薦 Password Hashing API 。這里需要注意的是,如果你代碼使用的都是 PASSWORD_DEFAULT 加密方式,那麼在資料庫的表中,password欄位就得設置超過60個字元長度,你也可以使用 PASSWORD_BCRYPT ,這個時候,加密後字串總是60個字元長度。
這里使用 password_hash() 你完全可以不提供鹽值 (salt) 和 消耗值 (cost),你可以將後者理解為一種性能的消耗值, cost 越大,加密演算法越復雜,消耗的內存也就越大。當然,如果你需要指定對應的鹽值和消耗值,你可以這樣寫:
$options = [
'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt
'cost' => 12 // the default cost is 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);
密碼加密過後,我們需要對密碼進行驗證,以此來判斷用戶輸入的密碼是否正確:
if (password_verify($password, $hash)) {
// Pass
}
else {
// Invalid
}
很簡單的吧,直接使用 password_verify 就可以對我們之前加密過的字元串(存在資料庫中)進行驗證了。
然而,如果有時候我們需要更改我們的加密方式,如某一天我們突然想更換一下鹽值或者提高一下消耗值,我們這時候就要使用到 password_needs_rehash() 函數了:
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {
// cost change to 12
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// don't forget to store the new hash!
}
只有這樣,PHP的 Password Hashing API 才會知道我們重現更換了加密方式,這樣的主要目的就是為了後面的密碼驗證。
簡單地說一下 password_get_info() ,這個函數一般可以看到下面三個信息:
algo – 演算法實例
algoName – 演算法名字
options – 加密時候的可選參數
所以,現在就開始用PHP 5.5吧,別再糾結低版本了。

8. php實現密碼加密

在注冊時進行$pass=md5($pass)就行了呀!登陸也是同樣的道理,先把用戶的密碼進行加密一次再和資料庫裡面的密碼進行比較。比如:$pass=md5($_POST[pass])

9. 用php將密碼存入資料庫,用什麼方法進行加密

題主你可以使用 md5 或者 sha1 進行初步處理,但為了更加安全,請你同時加上兩個 salt,一個靜態 salt,一個動態的 salt。以 md5 為例:x0dx0a假設通過 POST 傳來的密碼為 $_POST['password'],在存入 DB 前先進行如下的操作:x0dx0a$password = hash('md5', $_POST['password'].$staticSalt.$dynamicSalt);x0dx0ax0dx0a為了保證動態 salt 的唯一性,可以這樣操作:x0dx0a$dynamicSalt = hash('md5', microtime());x0dx0ax0dx0a對於動態的 salt 可以與生成的密碼一起保存在 DB 中,而靜態 salt 則可以直接放在類文件中(例如定義為一個靜態屬性即可)。x0dx0a首先謝謝題主採納了我的答案,但是我之前的回答並不是最佳答案,之所以有此加密的想法源於自己所讀的源碼可能比較老,所以並沒使用上較新版本的加密方法,例如 bcrypt等。x0dx0a此外,第二點,感謝評論中幾位前輩的提點,已經明白設置靜態 salt 的意義並不大,生成一個較長的動態 salt 已然可以解決問題。x0dx0ax0dx0aLZ應該採用加鹽HASH。x0dx0a如何「腌制」密碼呢?x0dx0a=_,=x0dx0a正確的格式應該是,用戶password+動態的saltx0dx0a動態的salt不能像2L所說的,使用microtime,因為時間在某些情況下不夠隨機,而且是可能被猜解的。x0dx0a這里推薦一個我用的加鹽HASHx0dx0a$salt=base64_encode(mcrypt_create_iv(32,MCRYPT_DEV_RANDOM));x0dx0a$password=sha1($register_password.$salt);x0dx0ax0dx0a解釋:x0dx0a首先使用mcrypt,產生電腦隨機生成的,專門用戶加密的隨機數函數。x0dx0a第二步,把得到的隨機數通過base64加密,使其變長並且不利於猜解。x0dx0a第三步,把得出的鹽拼接到密碼的後面,再對其使用sha1進行哈希x0dx0a再把password存入到用戶的資料庫。x0dx0aPS:為何不用靜態的salt?沒有必要,使用一個動態隨機足夠長的鹽足矣。x0dx0a為何不用MD5?因為長度不夠。x0dx0a為何沒有使用多次HASH?因為這樣反而容易發生碰撞。x0dx0aHASH好之後怎麼使用「腌制」好的密碼?x0dx0a用戶注冊->提交密碼->產生salt->腌制好的密碼存入資料庫->salt存入資料庫。x0dx0a用戶登錄->提交密碼->調用salt接到提交密碼的後面->進行HASH->調用之前注冊腌制好的密碼->對比HASH值是否和這個密碼相同

熱點內容
電腦伺服器號在哪裡找 發布:2025-02-12 23:22:29 瀏覽:10
linux查看系統是32位 發布:2025-02-12 23:17:29 瀏覽:987
從資料庫中隨機取資料庫數據 發布:2025-02-12 23:17:25 瀏覽:876
ftp下載軟體安卓 發布:2025-02-12 23:07:24 瀏覽:565
c搜索演算法 發布:2025-02-12 23:05:47 瀏覽:860
返回伺服器地址 發布:2025-02-12 23:05:45 瀏覽:179
我的世界推薦在線伺服器 發布:2025-02-12 23:00:18 瀏覽:460
什麼是解壓目錄 發布:2025-02-12 22:49:24 瀏覽:979
惠普電腦選購要考慮哪些因素配置 發布:2025-02-12 22:43:50 瀏覽:221
演算法導論和演算法 發布:2025-02-12 22:43:13 瀏覽:930