當前位置:首頁 » 編程語言 » php數據加密

php數據加密

發布時間: 2022-05-06 18:48:01

1. 怎麼處理php加密的數據

php將密碼存入資料庫,可以分內常見的4種方式:
1、直接md5加密存到到資料庫
2、md5兩次存到資料庫
3、對需要加密的字元串和一個常量 進行混淆加密
4、生成一個隨機的變數存到資料庫中,然後對需要加密的字元串和這個隨機變數加密

1
2
3
4
5
6
7
8
9
10
11
12

<?php
$str="admin"; //需要加密的字元串
$str2="php"; //增加一個常量混淆
$pass1=md5($str);

$pass2=md5(md5($str));

$pass3=md5($str.$str2);

echo $pass1."".$pass2."".$pass3;

?>

輸出:

第四種

1
2
3
4

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

2. PHP代碼如何加密


<?php
functionencode_file_contents($filename){
$type=strtolower(substr(strrchr($filename,'.'),1));
if('php'==$type&&is_file($filename)&&is_writable($filename)){//如果是PHP文件並且可寫則進行壓縮編碼
$contents=file_get_contents($filename);//判斷文件是否已經被編碼處理
$contents=php_strip_whitespace($filename);

//去除PHP頭部和尾部標識
$headerPos=strpos($contents,'<?php');
$footerPos=strrpos($contents,'?>');
$contents=substr($contents,$headerPos+5,$footerPos-$headerPos);
$encode=base64_encode(gzdeflate($contents));//開始編碼
$encode='<?php'." eval(gzinflate(base64_decode("."'".$encode."'"."))); ?>";

returnfile_put_contents($filename,$encode);
}
returnfalse;
}

//調用函數
$filename='dam.php';
encode_file_contents($filename);
echo"OK,加密完成!"
?>

3. 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);
得到結果是
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$./U9C8sBjqp8I90dH6hi
SHA-256: $5$rounds=5000$usesomesillystri$/Tp.6
SHA-512: $6$rounds=5000$usesomesillystri$.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);
得到的結果是
以上幾種雖然是不可逆加密,但是也可以根據查字典的方式去解密。如下的地址中就提供了可以將上面的加密結果解密出來的功能。
http://www.cmd5.com/
那大家是不是加了就算加了密,也沒用啊,其實不然,只要你的加密足夠復雜,被破解出的可能性就越小,比如用以上三種加密方式混合加密,之後我會推薦給大家一個php的加密庫。
4. URL加密
string urlencode ( string $str )
此函數便於將字元串編碼並將其用於 URL 的請求部分,同時它還便於將變數傳遞給下一頁。
返回字元串,此字元串中除了 -_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進制數,空格則編碼為加號(+)。此編碼與 WWW 表單 POST 數據的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣。由於歷史原因,此編碼在將空格編碼為加號(+)方面與 RFC1738 編碼不同。
string urldecode ( string $str )
解碼給出的已編碼字元串中的任何 %##。 加號(『+『)被解碼成一個空格字元。
這是一種可逆加密,urlencode方法用於加密,urldecode方法用於解密,執行如下代碼:
$url = 『http://www.xxx.com/CraryPrimitiveMan/『;
$encodeUrl = urlencode($url);
echo $encodeUrl . "\n";// 如果是在網頁上展示的,就將\n修改為

echo urldecode($encodeUrl);
得到的結果如下
http%3A%2F%2Fwww.xxx.com%2FCraryPrimitiveMan%2F
http://www.xxx.com/CraryPrimitiveMan/
基於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
?>

4. 如何給php代碼加密

前台加密
後台接收到後
在和鹽值拼接
在加密
存入資料庫
我用md5舉例
前台:md5(pwd);
//前台找一個js加密擴展就行
後台:
$salt
=
mt_rand(100000,999999);
//隨機鹽值
$pwd
=
md5($_GET('pwd').$salt);
//這樣雙重加密後入庫了
登錄驗證時
前台也記得加密哦

5. php md5一般用來加密什麼東西

一般用來加密密碼,因為md5屬於不可逆的加密方式,所以認為它的安全性比較高,不過現在網上有一些網站專門提供md5解密,他們這種解密都是用的列舉法,基本上12位以下的數字組合都是能夠解密的,所以密碼一定要用數字和字母的組合。

6. php文件加密是干什麼的

加密自然是為了不讓別人修改,或者通過授權的方式去販賣等等。
php加密混淆的演算法,比如以下幾種:
PHP神盾
PHPJM
威盾
ByteRun
online
encoder
Php
Guard
Phppro
易盾PHP源碼加密
Zend
Guard加密
通過別人寫好的工具或者網站加密。

7. php有什麼加密出來比較短的加密方法

一般來說,加密分為兩個部分,一個是非對稱加密,一個是對稱加密,使用對稱加密加密正文信息,使用非對稱加密加密對稱加密的密鑰,然後發送加密數據(消息摘要和數字簽名就不討論了),這是正規的數據加密策略,對稱加密默認支持大數據分段加密策略,你只需要從介面中完成加密即可,而且對稱加密速度比非對稱加密快很多,如果你需要使用這個策略建議使用AES。如果你不願意使用對稱加密,只願意使用AES加密,那你就必須喪失速度了,而且自己處理分段加密,因為RSA加密通常是117個位元組就要分段(這個長度可能和密鑰長度有關,我是用的介面是117),你需要自己把數據變成N個117位元組的數據段來完成加密,解密也需要自己完成位元組拼裝。

8. 如何對PHP文件進行加密

對PHP文件進行加密,通常使用 Zend Guard,這是目前市面上應用比較多的PHP源碼加密產品。

加密流程大概如下:
1、打開Zend Guard 5.5.0,[File]->[New]->[Zend Guard Project],新建項目。
2、點擊 Next ,下一步。彈出如下對話框,選擇要進行加密的源文件或文件夾

3、接下來是選擇PHP的版本[與你web伺服器上PHP的版本相對照],這里很重要,版本不對會出錯,[Finish]完成項目的創建。
4、在Zend Guard左側的Guard Explorer中,可以看到你新建的項目了,滑鼠選中項目名稱後,右鍵單擊[Encode Project],完成。

9. PHP中哪種加密方式好

aes/des加密速度快,適合大量數據,des容易破解,一般用3重des,後來又出現了更快更安全的aes
rsa是公鑰加密,速度慢,只能處理少量數據,優點是公鑰即使在不安全的網路上公開,也能保證安全
常見情況是雙方用rsa協商出一個密鑰後通過aes/3des給數據加密。
bcrypt,是一個跨平台的文件加密工具。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字元,並將在內部被轉化為448位的密鑰。
綜上所述用bcrypt還是好點,最好用md5安全性高,更多問題到後盾網論壇問題助專區http://bbs.hounwang.com/

10. 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字串。
他們的使用方法如下:
<?php
$password = hash("sha256", $password);
PHP內置了hash()函數,你只需要將加密方式傳給hash()函數就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式。
鹽值
在加密的過程,我們還有一個非常常見的小夥伴:鹽值。對,我們在加密的時候其實會給加密的字元串添加一個額外的字元串,以達到提高一定安全的目的:
<?php
function generateHashWithSalt($password) {$intermediateSalt = md5(uniqid(rand(), true));$salt = substr($intermediateSalt, 0, 6);
return hash("sha256", $password . $salt);}
Bcrypt
如果讓我來建議一種加密方式的話,Bcrypt可能是我給你推薦的最低要求了,因為我會強烈推薦你後面會說到的Hashing API,不過Bcrypt也不失為一種比較不錯的加密方式了。
<?php
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.phpPassword Hashing API
這里才是我們的重頭戲,Password Hashing API是PHP 5.5之後才有的新特性,它主要是提供下面幾個函數供我們使用:
password_hash() – 對密碼加密.
password_verify() – 驗證已經加密的密碼,檢驗其hash字串是否一致.
password_needs_rehash() – 給密碼重新加密.
password_get_info() – 返回加密演算法的名稱和一些相關信息.
雖然說crypt()函數在使用上已足夠,但是password_hash()不僅可以使我們的代碼更加簡短,而且還在安全方面給了我們更好的保障,所以,現在PHP的官方都是推薦這種方式來加密用戶的密碼,很多流行的框架比如Laravel就是用的這種加密方式。
<?php
$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越大,加密演算法越復雜,消耗的內存也就越大。當然,如果你需要指定對應的鹽值和消耗值,你可以這樣寫:
<?php
$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);密碼加密過後,我們需要對密碼進行驗證,以此來判斷用戶輸入的密碼是否正確:
<?php
if (password_verify($password, $hash)) {
// Pass
}
else {
// Invalid
}
很簡單的吧,直接使用password_verify就可以對我們之前加密過的字元串(存在資料庫中)進行驗證了。
然而,如果有時候我們需要更改我們的加密方式,如某一天我們突然想更換一下鹽值或者提高一下消耗值,我們這時候就要使用到password_needs_rehash()函數了:
<?php
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吧,別再糾結低版本了。
Happy Hacking

熱點內容
白車黑頂xc40是哪個配置 發布:2024-05-10 12:15:53 瀏覽:536
沒有設密碼格式不正確是什麼意思 發布:2024-05-10 12:15:50 瀏覽:807
存儲系統Ceph 發布:2024-05-10 12:02:02 瀏覽:295
linux是幾位 發布:2024-05-10 11:32:53 瀏覽:877
虎牙直播安卓投屏用什麼軟體 發布:2024-05-10 11:31:30 瀏覽:835
桃源碼頭電話 發布:2024-05-10 11:27:44 瀏覽:72
編譯器連接地址是內存地址 發布:2024-05-10 11:16:34 瀏覽:524
網吧游戲伺服器怎麼配置 發布:2024-05-10 11:14:39 瀏覽:243
c語言fgets用法 發布:2024-05-10 10:54:21 瀏覽:582
編程貓新手 發布:2024-05-10 10:54:10 瀏覽:911