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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯 # H5 f. t% @7 I2 |+ M, z0 l2 p# b

% Q! ?/ Y; r1 i1 u# x; \1 G
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

$ Z2 V2 l8 {6 q" g
  1. rpm -qa | grep php-mcrypt
複製代碼
6 @, `1 d8 N5 U/ P8 \, n0 Q4 s( Y
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module

. A- \! o* c. R5 D
  1. <?php8 P/ |' H  R0 J+ v: @, S
  2. // Show all information, defaults to INFO_ALL8 b1 D  i) o* ]+ @  K
  3. phpinfo();
    - }# _. Y) h/ H( t* N2 ^$ u
  4. ?>
複製代碼
* ?, i/ v: A+ x" i2 @5 x
然後於browser 執行phpinfo.php,結果如下:
! z9 |  V3 _- r2 _" _
1.png
8 }3 B. _. O# {

3 }0 z* s0 r' A& o' W1 _
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:

# @+ U5 H& W# }( v
  1. //加密函數撰寫, j& v; P& \! d( ]
  2. function encrypt($source,$toencrypt){  3 n9 X8 E5 l2 F# }+ _: Z) D' u2 E
  3. //加密用的key   
    3 n8 a7 ^, B& n: U) u8 |, u& u
  4. $key = $source;  ) q( [8 w7 y0 v9 n: n: q5 C
  5. //使用3DES方法加密   7 q. e/ Q3 K9 V! K. W8 X' h$ ?
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    3 `, p$ C# ~/ ~# C7 M- x6 ]: q
  7. //初始化向量來增加安全性
      @. a: i; M3 f  s8 S
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    0 C8 B0 d! J, H+ A7 m+ G; Y& s
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式& d7 q+ F) v% [5 q
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    * l) N9 U: B$ k  V3 G
  11. //回傳解密後字串
    6 `  j! A2 `1 R1 Y/ m
  12. return base64_encode($encrypted_toencrypt);  / T3 W/ R! C2 R, R- A
  13. }  9 t  t. A. v9 ~) R6 H2 F/ ?
  14. //解密函數撰寫
    ) ^9 T+ b0 a$ z! b. o3 N
  15. function decrypt($source,$todecrypt) {  3 @% Q- q2 X# T5 L3 r
  16. //解密用的key,必須跟加密用的key一樣   - s$ i) y: ~* k0 D
  17. $key = $source;  
    * r1 C% k9 U* S9 U2 I9 t
  18. //解密前先解開base64碼% |. \) b  A; |4 f
  19. $todecrypt = base64_decode($todecrypt);& Z7 k, ]( v* n: f" h: x3 k" H
  20. //使用3DES方法解密- I# y* ^$ X& ?0 _, F
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    $ Y" J/ I& n3 I
  22. //初始化向量來增加安全性 + K) V' y. L& X0 j/ ]4 s7 A. t
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    & [6 F1 x/ W2 g) C0 y
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    $ w: ]% j) h, ^) d5 Q: @; j
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
    8 A$ x  O" m  m6 B
  26. //回傳解密後字串
    ) h% {5 J6 B  m' K) A4 `4 x4 u
  27. return $decrypted_todecrypt;  
    0 W2 N' w" P. S
  28. }  
    2 t" B% J% m5 i3 |' P& A
  29. //寫好加解密的函數之後,就可以來進行測試了1 U, E: O9 P' R4 Y: p! v5 t
  30. //key設定% ~' h: H# b0 T: S" q: Q  x# f
  31. $source ="1234567890";
    3 f5 ?8 ^$ L7 c  c
  32. //要加密的字串
    ; S) N$ @' |- l- e% u8 \
  33. $string ="www.av4u.co";: F3 `% F4 [5 F0 n9 y. [# O7 Z
  34. echo "string=".$string."<br>";
    9 A& d! c* I0 ^9 D9 Z, j6 e0 R) @
  35. //進行加密並顯示加密後的字串$ w( r9 H5 X) x: s
  36. $encode = encrypt($source,$string);
    & }/ ^4 D6 G$ j5 N( A( v  @, _. W  b
  37. echo "encode=".$encode."<br>";
    2 G( E/ z/ v% M4 }) `8 ?+ J
  38. //進行解密並顯示解密後的字串9 f- o+ |1 o5 S
  39. $decode = decrypt($source,$encode);
    8 |7 h, e5 v; A3 J9 I- s
  40. echo "decode=".$decode."<br>";
複製代碼
! A0 _# R$ `# A( I/ {+ ^( Y# I
結果如下:
0 r' X% V2 Y7 y8 m# x8 J
1.png
  e7 @) [( ?9 A/ |: G) V
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:

) d- b- v8 I) H( r
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 22:21 , Processed in 0.077849 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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