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 編輯
) J: Z) h$ I& i- s" R. i2 _) m* K8 ^! F' u
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
. P  G, p* U% H/ h+ W/ q6 o; Z5 h
  1. rpm -qa | grep php-mcrypt
複製代碼

6 n& i! @+ p- z0 X4 T或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
: ]6 a! y7 g( Y7 z
  1. <?php. P8 c) I( q. \. ?6 J/ V2 W  K4 O1 P
  2. // Show all information, defaults to INFO_ALL' S, L( I. I1 D# b7 f
  3. phpinfo();
    0 n' Q5 K4 ]6 R4 v
  4. ?>
複製代碼

/ K  H5 S9 L8 o+ \1 ~然後於browser 執行phpinfo.php,結果如下:

7 ^. }+ T* F. U
% P5 K# {2 r0 `2 O* s

  C) y4 }* U3 U; _7 l( y
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:

5 r9 L$ f2 B/ i
  1. //加密函數撰寫+ C' k! ~8 l' @. f5 N$ q
  2. function encrypt($source,$toencrypt){  
    5 r' H7 v" i& Y1 H
  3. //加密用的key   
    9 \5 A7 a1 b. B. Z3 P
  4. $key = $source;  
    . c# G+ G6 f  F
  5. //使用3DES方法加密   " @/ X% o7 t9 u1 z  x
  6. $encryptMethod = MCRYPT_TRIPLEDES; 1 B* o8 M% v, q6 Q* i. F) K- D
  7. //初始化向量來增加安全性
    , |1 D$ G' }7 Y- @5 T
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  6 n4 W0 Q4 O& Y# {& k! B: O
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式6 j" V5 c) j4 U$ N, c# ?, |# p
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    4 X: _/ Y& L- o9 A" y- Z- ?( D
  11. //回傳解密後字串) \/ L9 n% J, h% ]! E3 W
  12. return base64_encode($encrypted_toencrypt);  9 R' T, n2 U$ @; C; f0 h1 @0 P
  13. }  % y" p9 l/ e, Q7 ~/ B
  14. //解密函數撰寫6 K7 j1 n$ y4 H1 M
  15. function decrypt($source,$todecrypt) {    Y5 X* n6 {8 u/ Z$ H
  16. //解密用的key,必須跟加密用的key一樣   
    5 m! |% n$ o. X
  17. $key = $source;  
    * A; ^( t. J" z7 I6 S5 E
  18. //解密前先解開base64碼* F5 p8 o2 D! G2 E6 |
  19. $todecrypt = base64_decode($todecrypt);
    1 L, {2 }5 M! g: m& c
  20. //使用3DES方法解密
      y" ~8 A. P' }) u7 C2 M
  21. $encryptMethod = MCRYPT_TRIPLEDES;  9 l  ]5 x5 f& k4 E
  22. //初始化向量來增加安全性 " I% T, R& V3 T3 V
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    * }2 S, W5 Q1 K" b. Y
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    % h! t) F7 V0 \/ |, R
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);9 j7 I6 f& N/ `/ d5 K% ?
  26. //回傳解密後字串! j* d5 J; X: M1 ~+ ?
  27. return $decrypted_todecrypt;  1 |8 _) [, q- E  `) J
  28. }  
    . o( d4 \+ t! |" r8 c
  29. //寫好加解密的函數之後,就可以來進行測試了: Z3 @5 M% C# m. q' |
  30. //key設定
    1 I3 {2 F9 D3 z( \9 M8 A
  31. $source ="1234567890";
    ) u3 A1 X; G7 j" M2 K& S+ _: D) [( Q
  32. //要加密的字串% r8 p+ f7 P9 E$ F
  33. $string ="www.av4u.co";
    ' f; k& z$ }' ?; P2 z& Q
  34. echo "string=".$string."<br>";
    & u% B; X& q& n9 Z' }
  35. //進行加密並顯示加密後的字串
    ; E! f! K7 S/ O2 @" u+ ~: j( I
  36. $encode = encrypt($source,$string);
    ' K0 J9 a7 d% c3 p8 M! P4 J
  37. echo "encode=".$encode."<br>";( n' ?+ @+ g4 e+ I0 G( ~# \
  38. //進行解密並顯示解密後的字串
    " N$ O  `" j' B2 n* P9 S: X7 X
  39. $decode = decrypt($source,$encode);
    % ?+ B7 e) c2 p6 t  k. _
  40. echo "decode=".$decode."<br>";
複製代碼
' I, i. _9 W- @/ l
結果如下:
, b7 \3 M! B+ q3 D; [  A* G) l

+ C8 P* r# c0 H2 M* |' n; d
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
: f: H6 }& Y1 T6 ~( U/ G





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