PHP寫的加密函數(shù),支持私人密鑰(詳細介紹)
更新時間:2013年06月09日 16:02:03 作者:
本篇文章是對PHP寫的加密函數(shù)且支持私人密鑰進行了詳細的分析介紹,需要的朋友參考下
在開發(fā)PHP系統(tǒng)時,會員部分往往是一個必不可少的模塊,而密碼的處理又是不得不面對的問題,PHP 的 Mcrypt 加密庫又需要額外設置,很多人都是直接使用md5()函數(shù)加密,這個方法的確安全,但是因為md5是不可逆加密,無法還原密碼,因此也有一些不便之處,本文介紹加密函數(shù)支持私鑰,用起來還是不錯的.
代碼如下:
PHP:
<ol><li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw2"><?php</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="co1">// 說明:PHP 寫的加密函數(shù),支持私人密鑰 </span>
</div>
</li>
<li class="li1"><div class="de1"><span class="co1">// 整理:http://www.dbjr.com.cn </span>
</div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw2">function</span>
keyED<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$encrypt_key</span>
= <span class="kw3">md5</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$tmp</span>
= <span class="st0">""</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">for</span>
<span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">if</span>
<span class="br0">(</span>
<span class="re0">$ctr</span>
==<span class="kw3">strlen</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
<span class="br0">)</span>
<span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
.= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
^ <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$ctr</span>
++; </div>
</li>
<li class="li1"><div class="de1"> <span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">return</span>
<span class="re0">$tmp</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li2"><div class="de2"><span class="kw2">function</span>
encrypt<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw3">srand</span>
<span class="br0">(</span>
<span class="br0">(</span>
double<span class="br0">)</span>
<span class="kw3">microtime</span>
<span class="br0">(</span>
<span class="br0">)</span>
*<span class="nu0">1000000</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$encrypt_key</span>
= <span class="kw3">md5</span>
<span class="br0">(</span>
<span class="kw3">rand</span>
<span class="br0">(</span>
<span class="nu0">0</span>
,<span class="nu0">32000</span>
<span class="br0">)</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$tmp</span>
= <span class="st0">""</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">for</span>
<span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">if</span>
<span class="br0">(</span>
<span class="re0">$ctr</span>
==<span class="kw3">strlen</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
<span class="br0">)</span>
<span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
.= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
. <span class="br0">(</span>
<span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
^ <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$ctr</span>
++; </div>
</li>
<li class="li1"><div class="de1"> <span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">return</span>
keyED<span class="br0">(</span>
<span class="re0">$tmp</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li2"><div class="de2"><span class="kw2">function</span>
decrypt<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$txt</span>
= keyED<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
= <span class="st0">""</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">for</span>
<span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
</div>
</li>
<li class="li2"><div class="de2"> <span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$md5</span>
= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$i</span>
++; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
.= <span class="br0">(</span>
<span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
^ <span class="re0">$md5</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="br0">}</span>
</div>
</li>
<li class="li2"><div class="de2"> <span class="kw1">return</span>
<span class="re0">$tmp</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="re0">$key</span>
= <span class="st0">"www.yitu.org"</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="re0">$string</span>
= <span class="st0">"我是加密字符"</span>
; </div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
<li class="li1"><div class="de1"><span class="co1">// encrypt $string, and store it in $enc_text </span>
</div>
</li>
<li class="li1"><div class="de1"><span class="re0">$enc_text</span>
= encrypt<span class="br0">(</span>
<span class="re0">$string</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="co1">// decrypt the encrypted text $enc_text, and store it in $dec_text </span>
</div>
</li>
<li class="li2"><div class="de2"><span class="re0">$dec_text</span>
= decrypt<span class="br0">(</span>
<span class="re0">$enc_text</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw3">print</span>
<span class="st0">"加密的 text : $enc_text <Br> "</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="kw3">print</span>
<span class="st0">"解密的 text : $dec_text <Br> "</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="kw2">?></span>
</div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
</ol>
每一次加密后的結果是不一樣的,大大加強了密碼的安全性.
代碼如下:
PHP:
復制代碼 代碼如下:
<ol><li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw2"><?php</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="co1">// 說明:PHP 寫的加密函數(shù),支持私人密鑰 </span>
</div>
</li>
<li class="li1"><div class="de1"><span class="co1">// 整理:http://www.dbjr.com.cn </span>
</div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw2">function</span>
keyED<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$encrypt_key</span>
= <span class="kw3">md5</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$tmp</span>
= <span class="st0">""</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">for</span>
<span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">if</span>
<span class="br0">(</span>
<span class="re0">$ctr</span>
==<span class="kw3">strlen</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
<span class="br0">)</span>
<span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
.= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
^ <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$ctr</span>
++; </div>
</li>
<li class="li1"><div class="de1"> <span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">return</span>
<span class="re0">$tmp</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li2"><div class="de2"><span class="kw2">function</span>
encrypt<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw3">srand</span>
<span class="br0">(</span>
<span class="br0">(</span>
double<span class="br0">)</span>
<span class="kw3">microtime</span>
<span class="br0">(</span>
<span class="br0">)</span>
*<span class="nu0">1000000</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$encrypt_key</span>
= <span class="kw3">md5</span>
<span class="br0">(</span>
<span class="kw3">rand</span>
<span class="br0">(</span>
<span class="nu0">0</span>
,<span class="nu0">32000</span>
<span class="br0">)</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$tmp</span>
= <span class="st0">""</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">for</span>
<span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">if</span>
<span class="br0">(</span>
<span class="re0">$ctr</span>
==<span class="kw3">strlen</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
<span class="br0">)</span>
<span class="re0">$ctr</span>
=<span class="nu0">0</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
.= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
. <span class="br0">(</span>
<span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
^ <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li2"><div class="de2"> <span class="re0">$ctr</span>
++; </div>
</li>
<li class="li1"><div class="de1"> <span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">return</span>
keyED<span class="br0">(</span>
<span class="re0">$tmp</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li2"><div class="de2"><span class="kw2">function</span>
decrypt<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
</div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$txt</span>
= keyED<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
= <span class="st0">""</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="kw1">for</span>
<span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
</div>
</li>
<li class="li2"><div class="de2"> <span class="br0">{</span>
</div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$md5</span>
= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$i</span>
++; </div>
</li>
<li class="li1"><div class="de1"> <span class="re0">$tmp</span>
.= <span class="br0">(</span>
<span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
^ <span class="re0">$md5</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> <span class="br0">}</span>
</div>
</li>
<li class="li2"><div class="de2"> <span class="kw1">return</span>
<span class="re0">$tmp</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
</div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="re0">$key</span>
= <span class="st0">"www.yitu.org"</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="re0">$string</span>
= <span class="st0">"我是加密字符"</span>
; </div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
<li class="li1"><div class="de1"><span class="co1">// encrypt $string, and store it in $enc_text </span>
</div>
</li>
<li class="li1"><div class="de1"><span class="re0">$enc_text</span>
= encrypt<span class="br0">(</span>
<span class="re0">$string</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="co1">// decrypt the encrypted text $enc_text, and store it in $dec_text </span>
</div>
</li>
<li class="li2"><div class="de2"><span class="re0">$dec_text</span>
= decrypt<span class="br0">(</span>
<span class="re0">$enc_text</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw3">print</span>
<span class="st0">"加密的 text : $enc_text <Br> "</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="kw3">print</span>
<span class="st0">"解密的 text : $dec_text <Br> "</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="kw2">?></span>
</div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
</ol>
每一次加密后的結果是不一樣的,大大加強了密碼的安全性.
相關文章
PHP const定義常量及global定義全局常量實例解析
這篇文章主要介紹了PHP const定義常量及global定義全局常量實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05Laravel 5.4重新登錄實現(xiàn)跳轉到登錄前頁面的原理和方法
在日常開發(fā)中,我們經(jīng)常遇到一個需求,就是用戶登陸后存在過期時間,超時用戶需重新登錄,下面這篇文章主要給大家介紹了關于Laravel 5.4重新登錄實現(xiàn)跳轉到登錄前頁面的原理和方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07php數(shù)組函數(shù)序列之sort() 對數(shù)組的元素值進行升序排序
sort() 函數(shù)按升序對給定數(shù)組的值排序。注釋:本函數(shù)為數(shù)組中的單元賦予新的鍵名。原有的鍵名將被刪除2011-11-11