phpsha加密
使用:
$pri_key ="";
$pub_key = "";
$char = '方方塊兒';//要加密的字元
$sign = $this->RsaEncrypt($char,$pri_key);//加密結果
$result = $this->RsaDecrypt($sign,$pub_key);//對加密結果進行解密
加密:
public function RsaEncrypt($str,$pri_key){
$pi_key =openssl_pkey_get_private($pri_key);
if(!$pi_key)return false;//秘鑰不可用
openssl_private_encrypt($str,$encrypted,$pi_key);
$encrypted =base64_encode($encrypted);
return $encrypted;
}
解密:
public function RsaDecrypt($str,$pub_key){
$pu_key =openssl_pkey_get_public($pub_key);
if(!$pu_key)return false;//秘鑰不可用
openssl_public_decrypt(base64_decode($str),$decrypted,$pu_key);
return $decrypted;
}
註:開啟PHP的php_openssl擴展
B. 各位用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);
//
C. 用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值是否和這個密碼相同