52AV手機A片王|52AV.one

 找回密碼
 立即註冊
查看: 1927|回復: 0

[網頁伺服器] Linux下以PHP撰寫 3DES(mcrypt) 加密方法(ECB模式)[含3張圖]

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯 7 F0 P* a% b+ z; {2 E& d
4 G: }; o, y6 B# m6 C$ T! }! ?/ j) n
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
/ f( _; X6 R* _1 Q2 Y# }
  1. rpm -qa | grep php-mcrypt
複製代碼
" ^4 i1 J* Y& H% u/ n5 D
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module

1 Z: O- s. O; I/ y/ @6 }' s' I
  1. <?php
    1 P! X! b! ^" K7 o7 x& B
  2. // Show all information, defaults to INFO_ALL) m% A4 P- O3 {/ `  b0 N
  3. phpinfo();" `9 F' P3 a/ j" l
  4. ?>
複製代碼
  }# F/ |* a0 U, G3 ~5 ~: C" V! O
然後於browser 執行phpinfo.php,結果如下:
2 X3 O2 y7 @8 H$ V$ H# a
1.png
; h. g  [+ b8 g; \2 {

$ h( L0 `2 u. x  {# E5 S
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
) S+ b8 `$ h" i) D6 ^( R
  1. //加密函數撰寫
    / w8 v( g- ?7 u1 ^, [0 I7 W
  2. function encrypt($source,$toencrypt){  
    8 x+ y* }* {3 F. }; w0 Z7 P* ]
  3. //加密用的key   * u5 l" I& @; a7 S7 h5 m6 C
  4. $key = $source;  
    3 V' R0 c0 d! j
  5. //使用3DES方法加密   9 O. K! _% h, ^
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    $ R6 Q7 |: t& M
  7. //初始化向量來增加安全性' Y/ W  j2 ~, D& ]
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  7 A4 z4 J5 n/ ~' k5 O1 @$ k
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式$ V1 a' @8 Z0 c- p* n" [0 G5 j
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    5 N& x. K' Z" O; q3 l$ d8 i
  11. //回傳解密後字串; }2 V1 Z6 C7 Y2 t7 s( W, W5 s! Z
  12. return base64_encode($encrypted_toencrypt);  
    ! B+ k4 j, j3 n2 h, s
  13. }  
    * d% H) A1 p4 z( g! f
  14. //解密函數撰寫) z" h3 b3 W  _. L: s
  15. function decrypt($source,$todecrypt) {  
    6 Z( d2 t/ Q+ _6 G1 C' a7 ^
  16. //解密用的key,必須跟加密用的key一樣   3 Z5 u7 c" S; o& ^
  17. $key = $source;  
    9 M1 O% r2 }- I8 Z' c% K
  18. //解密前先解開base64碼* J9 @$ }2 ~% b  A
  19. $todecrypt = base64_decode($todecrypt);; S. Q/ f, D) `. U, {) g. t- c
  20. //使用3DES方法解密3 ?; r& ~& n0 }
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    ! T  c  D. S, i% y2 E
  22. //初始化向量來增加安全性 5 x. ~+ [' G( b: s# N
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  : U5 Q' K, }+ q& \$ {- H
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  + |7 b2 Y$ j3 v' O: k7 a
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
    % U4 i+ w; e2 \- g; ]+ R
  26. //回傳解密後字串1 m2 m* o& d* A1 n
  27. return $decrypted_todecrypt;  7 o& [0 f- C' v& R1 o
  28. }  
    & ~0 F/ W! r6 g0 p# J
  29. //寫好加解密的函數之後,就可以來進行測試了
      c9 n+ y+ x; i
  30. //key設定) ?/ V* [; d) [
  31. $source ="1234567890";
    # d% G5 H! W  s' G1 k/ T; P
  32. //要加密的字串
    # H! ^/ z$ l( l$ x4 O
  33. $string ="www.av4u.co";* R, F( V5 y$ G5 m' f+ ?4 z( a
  34. echo "string=".$string."<br>";! B( I# m5 o; l; r  ]5 `
  35. //進行加密並顯示加密後的字串
    2 B% o$ V1 G5 k0 R: l" r; z8 f9 T
  36. $encode = encrypt($source,$string);
    / R" X* `) }3 A  _, t4 R& N
  37. echo "encode=".$encode."<br>";
    4 ^  P- J+ ]: h- G
  38. //進行解密並顯示解密後的字串
    , l3 |( o' e, D0 V  |- Y- T; g
  39. $decode = decrypt($source,$encode);
    1 }8 K+ A; I& O( I
  40. echo "decode=".$decode."<br>";
複製代碼

- w8 m2 m* V( M' N. `3 R
結果如下:

7 v8 Q8 z7 K- [" H; ~/ d
1.png
1 c* x+ f; [! L0 z
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:

" |6 L  _4 f: l+ `. M2 Z
1.png
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則



中文酷站排行榜

本區塊內容依據『電腦網路內容分級處理辦法』為限制級網站,限定年滿18歲以上或達當地國家法定年齡人士方可進入,且願接受本站各項條款,未滿18歲 謝絕進入瀏覽。為防範未滿18歲之未成年網友瀏覽網路上限制級內容的圖文資訊,建議您可進行網路內容分級組織ICRA分級服務的安裝與設定。 (為還給愛護 本站的網友一個純淨的論壇環境,本站設有管理員)

QQ|小黑屋|手機板| 52AV手機A片王

GMT+8, 2026-2-4 06:23 , Processed in 0.084573 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表