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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯
) H: k+ ^# D4 u8 t) q$ V( C  M$ E5 s- p1 s* v4 ~0 L7 v
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

$ Y+ ~8 a' c7 W0 |
  1. rpm -qa | grep php-mcrypt
複製代碼
8 s" l7 ^) s7 w4 E: ]& Y
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
9 ]) k# A* H4 n; M7 P$ v
  1. <?php
    % y" w; E: D% F- n7 y- [
  2. // Show all information, defaults to INFO_ALL& w" @2 R/ X6 E9 S+ k+ \
  3. phpinfo();
    % j: ^$ G/ i4 u5 P& |& j
  4. ?>
複製代碼

1 y3 w2 A8 G; t3 M# M8 ]# H/ O然後於browser 執行phpinfo.php,結果如下:

+ |: w5 B) o; Z% \: ^. M; T+ \3 B
1.png . A7 v2 t( K8 P

# O4 z9 {% Z( E  k6 Z, l: a
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:

9 p! ?& {* J* w$ ]; S$ J( t
  1. //加密函數撰寫' ~% A; {0 Y: w( T2 Y
  2. function encrypt($source,$toencrypt){  ) Y+ v! Y5 N" g+ \$ r' }- i
  3. //加密用的key   
    + D4 M! x5 ^: I0 g2 o2 @: ]# z, D
  4. $key = $source;  : E8 v; h$ w& e2 P6 C4 x. g9 ]
  5. //使用3DES方法加密   : c+ I9 g/ w+ C
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    2 {3 U% A$ {3 D3 D( x* f3 n# Q5 \; E: H
  7. //初始化向量來增加安全性8 }1 ~+ j' H  \7 @+ c2 T
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  ; t  x1 Y% ?( `- W" h& f4 |
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式$ O  D. _, j0 ]5 P: D  X& I; Z
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    ( Y9 W) K. S0 \' B5 ~
  11. //回傳解密後字串
    ; }, w. g- s6 H! a5 N1 A: O
  12. return base64_encode($encrypted_toencrypt);  ' l* J9 r- G9 M) e& l1 B' F
  13. }  
    : s+ \: a' Y3 X0 F; l7 Z7 r
  14. //解密函數撰寫, ^6 ]5 }' W3 \& _) e$ x
  15. function decrypt($source,$todecrypt) {  7 H8 D: c1 T6 v# x: V
  16. //解密用的key,必須跟加密用的key一樣   : F$ {8 q; i2 U+ M
  17. $key = $source;  % X. U8 \* ^) o, s5 ^
  18. //解密前先解開base64碼. p8 e( o- }2 b: u
  19. $todecrypt = base64_decode($todecrypt);% ]5 j, c$ {0 Z; k! M* z8 k. b
  20. //使用3DES方法解密2 g: _2 [4 ?5 O: E1 V) f& G/ ^
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    4 D4 c" ]( q; y  c
  22. //初始化向量來增加安全性 4 }- a. s5 M) S9 X4 N2 ~
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  5 ?1 [, C3 y" B9 ], O' _
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    ! u" ~: F9 |: M! w5 C8 D) f
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);9 g9 U/ h* k1 a: q9 k6 a
  26. //回傳解密後字串& @& |  F$ }9 a  B1 J
  27. return $decrypted_todecrypt;  
    $ [; ^  R* ^+ z% \3 i
  28. }  7 p! T1 t4 C& E4 E' X
  29. //寫好加解密的函數之後,就可以來進行測試了
    1 I8 s4 S" a$ H7 q: {, q( }' V
  30. //key設定* M4 |! [% Z( d. X, ?; U$ \: D. o
  31. $source ="1234567890";
    " Q  A) E4 l- @& H7 g% Q- v
  32. //要加密的字串7 ~7 G4 x: m8 x5 x6 L/ {* z
  33. $string ="www.av4u.co";
    # h$ Q* k6 F$ s% E* H
  34. echo "string=".$string."<br>";
    ! E8 j3 W8 q) a8 M& i
  35. //進行加密並顯示加密後的字串
    $ ]$ G# o9 o1 V) q% o% Q
  36. $encode = encrypt($source,$string);
    # R7 Y- \0 C6 Y% K' N5 z4 j5 _9 e6 Z8 F
  37. echo "encode=".$encode."<br>";
    8 o0 p; S+ q( h. \
  38. //進行解密並顯示解密後的字串8 s! Q- k) K) S- y9 B
  39. $decode = decrypt($source,$encode);
    5 R" L8 w4 I% B* S
  40. echo "decode=".$decode."<br>";
複製代碼
" G: ~4 [0 l4 u# p9 o
結果如下:
: B  k3 P  m$ |# @
1.png * l/ g* U+ }% M/ P5 I8 Y3 T
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
6 K  v( @$ {/ [: L0 B- l
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2025-4-4 21:43 , Processed in 0.048773 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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