文字加密php
PHP基於OpenSSL的加密解密與驗證技巧主要包括以下方面:
一、簽名校驗方法
- 生成密鑰對:首先,需要生成RSA私鑰和公鑰。私鑰用於加密信息和生成簽名,公鑰用於解密簽名和驗證信息。
- 簽名生成:利用私鑰對要傳輸的信息進行加密,生成簽名。簽名和信息一起作為明文傳輸。
- 簽名驗證:接收端收到信息後,利用公鑰解密簽名,得到原始信息的哈希值。同時,利用相同的哈希演算法對接收到的信息進行處理,得到新的哈希值。比較兩個哈希值是否一致,若一致則驗證成功,否則驗證失敗。
二、解密流程
- 解密操作:使用已知的密鑰和加密演算法,對密文進行解密操作,從而恢復出原始信息。
三、注意事項
- 密鑰管理:密鑰的安全存儲和管理至關重要。私鑰應妥善保管,避免泄露。公鑰可以公開,但應確保其在傳輸過程中的完整性。
- 演算法選擇:根據實際需求選擇合適的加密演算法和哈希演算法。不同的演算法在安全性、性能和適用場景上有所不同。
- 錯誤處理:在加密、解密和簽名校驗過程中,應做好錯誤處理機制,以便在出現問題時能夠及時發現和解決。
四、實踐建議
- 在實際應用中,可以結合PHP的OpenSSL擴展庫來實現上述功能。OpenSSL擴展庫提供了豐富的函數介面,可以方便地實現加密、解密、簽名和驗證等操作。
- 為了提高代碼的可讀性和可維護性,建議將相關的加密解密和驗證邏輯封裝成獨立的函數或類。這樣可以方便地在不同的項目或模塊中復用這些功能。
『貳』 php中如何使用MD5加密
在PHP中,使用MD5加密時,通常的做法是將需要加密的數據分割成若干段,分別對每一段進行MD5運算。這樣做的好處在於,即使原始數據很長,也能保證每次處理的數據量合理,避免一次性處理大量數據導致的性能問題。
具體來說,可以先將待加密的數據字元串分割成若干小段,每段的長度可以根據實際情況設定。比如,可以將數據按128位(16位元組)進行分割。接著,對每一段分別執行MD5加密操作,得到一系列的密文結果。
然後,將這些密文結果按照某種順序連成一個超長的字元串。這里需要注意的是,連接密文時,最好添加一些分隔符,以避免混淆。例如,可以使用「-」或「:」作為分隔符。
完成字元串連接後,再次對整個超長字元串執行MD5運算。最終,你將得到一個新的32位長度的密文。這個密文就是對原數據的最終加密結果。
需要注意的是,雖然這種方法可以有效處理大段數據,但其安全性並不如使用一次完整的MD5加密。因為多次MD5運算雖然可以增加數據處理的復雜度,但仍然可能面臨MD5碰撞等安全風險。因此,在實際應用中,建議盡可能使用安全的加密演算法,如bcrypt或Argon2等。
盡管如此,對於某些特定場景,比如需要對大文件進行分塊加密,這種方法還是非常實用的。通過這種方式,不僅可以提高處理效率,還能在一定程度上增強安全性。
『叄』 PHP怎麼加密後是一串數字
應該是自己編寫的,,這個也很簡單,比如:要加密的數是123,加密演算法是:
INT((A*5-A/4)*135+A-A*6),當然以上只是我自己寫的一個,具體他是怎麼寫的要推算,能明白我的意思嗎?
『肆』 PHP 加密:AES & RSA
最近兩年一直從事與金融相關項目的開發與維護。但是,關於 PHP 加密解密的最佳實踐,網上沒有人給出一個完美的總結。恰逢最近看了《圖解密碼技術》一書,對 PHP 加解密有了更深刻的認識。
為了避免各位看枯燥的文字理論,開篇我就把總結給出:
一、對稱加密
對稱加密的特點是加解密速度快,加密後的密文強度目前還沒有硬解的可能性。但是,在未來隨著計算機性能的提升有可能會出現被破解的可能性。
對稱加密的缺點也很明顯。對稱加密的加密過程與解密過程使用的是同一把密鑰。一旦泄漏密鑰,加密就失去了任何意義。
根據《圖解密碼技術》一書的推薦,對稱加密目前推薦使用 AES。在 PHP 當中要實現 AES 加解密,是使用 openssl 擴展來實現。所以,請確保你的 PHP 已經開啟了 openssl 擴展。
可以通過如下方式檢測:
或者如下方式檢測:
AES 的加密模式屬於分組密碼模式。所謂分組密碼,是加密時把明文按照固定的長度分組,然後再進行加密。當然,細節之處很很多不同。AES 分組模式有多種:ECB、CBC、CFB、OFB、CTR 五種分組模式。目前優先推薦使用 CBC 模式。
如果使用 CBC 模式,那麼在加密的時候,就需要一個前置的加密向量 IV。當初博主在使用 AES 來加密的時候,就很奇怪一個對稱加密為何要這個向量。因為,在博主寒冰的潛意識里,對稱加密只需要一個密鑰就 Ok 了。沒想到 AES 加密還有多種模式,而這個 CBC 模式恰恰就需要一個這樣的向量值。關於這個向量大家可以在網上查閱相關的資料。這個東西非常重要,也非常好理解。
關於 PHP AES 加解密會用到的相關方法:
AES 支持三種強度:128、192、256。128 位的強度最低,但是,加密解密速度較快。256 位強度最高,但是,加密解密速度最低。所以,大家根據自己系統的重要程度選擇使用對應強度。通常普通的金融項目使用 192 位完整夠用了。頂級的就用 256 位。其他的就用 128 位吧。
二、非對稱加密
非對稱加密是指公鑰加密私鑰解密,私鑰加密公鑰解密的演算法。非對稱加密的演算法有很多。《圖解密碼技術》一書推薦使用 RSA 演算法。它使用起來也非常簡單。
要使用 RSA 演算法。首先,我們必須生成一對公鑰私鑰。其實生成公鑰私鑰很簡單。
在 Linux 系統,直接使用如下命令生成:
此命令會生 ~/.ssh/ 目錄下生成兩個文件:
id_rsa 是私鑰, is_rsa.pub 是公鑰。
關於 PHP RSA 加解密會用到的相關方法:
以上就是關於在 PHP 項目開發中,我們使用的加密解密演算法的一個總結。博主寒冰在總結過程中難免會有不足之處,還請大家指正!謝謝!
『伍』 各位用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);//
『陸』 php源碼怎麼加密
一、無需任何PHP擴展的加密
此類加密的代表有 威盾PHP加密專家、PHP在線加密平台、PHP神盾 等。
此類加密都是以eval函數為核心,輔以各式各樣的字元串混淆和各種小技巧,來達到加密目的(更准確的說,應該算是混淆)。下面以一個簡單的hello world為例來說明此類加密的大體過程。
<?php
echo "hello world";
首先 ,我們把這段代碼變為通過eval執行的
<?php
eval('echo "hello world";');
然後 ,我們再進行一些轉換,比如說base64編碼
<?php
eval(base64_decode('ZWNobyAiaGVsbG8gd29ybGQiOw=='));
就這樣子,我們的第一個加密過的php代碼新鮮出爐了。。。
上面這個例子非常非常簡單,基本上任何有一點php語言基礎甚至別的語言基礎的人都能輕松的看懂並解密。因此,我們需要一些方法讓這個加密至少看上去不是那麼簡單。
二、同時採用多種編碼函數
除了剛才提到的base64,php還有許多內置的編碼函數,例如urlencode、gzcompress等。把這些函數混合使用可以提高解密的復雜度(不是難度),此外還可以使用strtr來制定自己的編碼規則。 使用變數來代替函數名 使用特定字元來命名變數
這兒所說的特定字元是一些極其相似的字元,如I和1,0和O。試想一下滿屏都是O和0組成的變數,並且每一個的名字長度都在10個字元以上。。。 判斷文件自身是否被修改
這個功能看似容易,對文件做一下摘要再進行下對比即可知道是否被修改了,但是如何才能在文件內把摘要嵌入進去呢?我沒有找到完美的方案,但一個變通的方案還是很容易的。。。
<?php
$code = substr(file_get_contents(__FILE__), 0, -32);
$hash = substr(file_get_contents(__FILE__), -32);
if (md5($code) !== $hash) {
exit('file edited');
}
當然,你可以把這個校驗字元串放在別的位置來提高破解的難度。有了這個,別人想破解你的程序可就得多費一點功夫了。。。
既然知道了原理,那解密自然也就非常簡單了,總體來說就三步:
把eval替換為輸出,比如echo 根據編碼規則把字元串還原 如果文件未解密完全,從第一步開始繼續
當然,實際上的解密過程並沒有這么簡單,比如說如果加密的時候使用了gzcompress,那得到的數據將會包含一些二進制數據,而採用一般的文本編輯器打開時這些數據都會顯示為亂碼,並且在保存時丟失部分數據。解決方法很簡單也很麻煩,那就是使用二進制(16進制)方式打開、修改和保存。