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

標題: Linux下以PHP撰寫 3DES(mcrypt) 加密方法(ECB模式) [打印本頁]

作者: IT_man    時間: 2014-12-11 21:02
標題: Linux下以PHP撰寫 3DES(mcrypt) 加密方法(ECB模式)
本帖最後由 IT_man 於 2014-12-11 22:31 編輯
2 R/ h7 Y+ d; T4 u
( s3 y/ _/ z3 S  g1 u
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

% E5 F5 F8 H+ u& R8 s* y. X
  1. rpm -qa | grep php-mcrypt
複製代碼
7 B+ i6 v" z4 L* c5 ?
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
+ I6 {& r1 a) b' P7 K; w
  1. <?php; f& x4 \* s* g/ u, c
  2. // Show all information, defaults to INFO_ALL% U6 L6 W- K* m, b) k2 y
  3. phpinfo();
    9 u) K! ]  P: {/ U. ^2 i4 M1 v
  4. ?>
複製代碼

7 g1 X0 \; \- D然後於browser 執行phpinfo.php,結果如下:
2 r% C* W; Q8 q5 Q) a

9 o/ X6 ?+ `# I6 L& @

. D5 l9 S  Q4 b2 h+ V; ^! V6 a
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
9 b; V/ g2 S8 n) W
  1. //加密函數撰寫2 y8 s0 P7 j3 e& I
  2. function encrypt($source,$toencrypt){  4 c( }; A1 p. a4 F. Z( J% i
  3. //加密用的key   8 g$ E! G4 U( s3 E
  4. $key = $source;  
    ( k$ n1 y  p$ r7 K$ y
  5. //使用3DES方法加密   5 l. n/ [3 L. T* A# _5 H
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    $ S* T/ a+ N, T, }& L! t
  7. //初始化向量來增加安全性8 B0 f, y! {9 [  Z, z
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    8 ^' j3 n  N  C; K" p
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式' Q( ^! S! l- s. h  [' @" T
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    ! N4 d6 R( ]& J! z7 R* F& D
  11. //回傳解密後字串* `) k. v1 B* L7 Y: D
  12. return base64_encode($encrypted_toencrypt);  
    & ?4 j  P. l- X* i% `
  13. }  
    " i) e' C! C+ J0 L1 I3 ~
  14. //解密函數撰寫
    # N8 `* a( N. p, r, [/ u+ q7 j- {
  15. function decrypt($source,$todecrypt) {  1 w7 _; X0 l: z4 }
  16. //解密用的key,必須跟加密用的key一樣   2 p2 r7 N  n( a
  17. $key = $source;  0 }! i0 y( E1 S- E, i1 q7 |" h: s; w
  18. //解密前先解開base64碼# K  [" E; j" N
  19. $todecrypt = base64_decode($todecrypt);
    : ^1 T% `, C8 u7 ]# {: Y. L$ t
  20. //使用3DES方法解密
    * W, v6 F9 j! |; C
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    / @4 \( o6 ?( \3 x1 M( s2 ~( }9 q, I8 J
  22. //初始化向量來增加安全性 - J6 ]7 Q& \5 b, Q2 f
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    $ v+ M6 {3 x4 _7 d- W. P
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    * ~7 \8 f5 M* u% \9 h3 H  ]
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
    4 Z0 S! Z8 t5 f
  26. //回傳解密後字串
    ! A% Z# u8 n5 D, n, g, P& J
  27. return $decrypted_todecrypt;  
    - ]( y7 w& H; z# v: ?  `2 Q
  28. }  4 E% R* E& _$ V
  29. //寫好加解密的函數之後,就可以來進行測試了
    ) X/ F7 W) V! B7 w
  30. //key設定7 K5 ?% |$ [' G
  31. $source ="1234567890";* k) U$ C5 J, h* a+ a) s* E
  32. //要加密的字串* J5 L# f, k" r) \& E  L
  33. $string ="www.av4u.co";5 c$ `1 @$ k" k% l! S( d, s/ H
  34. echo "string=".$string."<br>";
    0 ?7 R" }# L. t
  35. //進行加密並顯示加密後的字串' e8 e5 r# q2 L8 u# X% ]  ~+ i
  36. $encode = encrypt($source,$string);( Q+ Z3 j& ?) N1 B% u
  37. echo "encode=".$encode."<br>";
    & n, M, B* {9 y1 D8 \
  38. //進行解密並顯示解密後的字串
    + G+ B: j& j( K( x! y
  39. $decode = decrypt($source,$encode);
    7 k) W" t( ?- A4 a' t: w) ]) ^
  40. echo "decode=".$decode."<br>";
複製代碼

( j+ Q$ i5 Z6 C
結果如下:
6 ~8 Y' z* j" M' `/ g/ E/ X/ h4 ^: k* ~

) I8 c4 X! k! L4 g
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:

! [6 [3 V) r7 e! K3 U* i





歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av23.xyz/) Powered by Discuz! X3.2