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 編輯
. w, m- G3 ^  E3 j9 w' e* e
! `$ r7 h/ K3 ]/ g* w
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
* o# y: v: f- s
  1. rpm -qa | grep php-mcrypt
複製代碼

, R+ N& ~. |* B4 Q2 B或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
& ^+ J# l, q: G# b
  1. <?php2 C; g( j. O* F% ~; c, t
  2. // Show all information, defaults to INFO_ALL- ~5 @6 b+ @* |+ m! j/ J
  3. phpinfo();
      W' g4 x5 N7 ]
  4. ?>
複製代碼
  Q& W2 G" A( G# H
然後於browser 執行phpinfo.php,結果如下:

$ r# V6 }3 _1 [/ q9 |' C
* {/ o, @, ~* U3 k- D

8 g9 e$ X, Q, M) [0 L" O
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
- U2 m  d' s" Y. Z# n, q
  1. //加密函數撰寫2 I" E" k# X: `$ {" E
  2. function encrypt($source,$toencrypt){  
    6 ~, {3 `- ?/ K0 P, K8 q0 h( X
  3. //加密用的key   
    2 ~" I6 Q& S& Y! @' D4 E- Z' m
  4. $key = $source;  
    * h  g- Q( B% K( Q
  5. //使用3DES方法加密   
    ; P0 T3 T9 Z6 S  `# e. _
  6. $encryptMethod = MCRYPT_TRIPLEDES; # @- ]) j; z' q1 `" W% d( r  a
  7. //初始化向量來增加安全性: _8 K8 f  R- d% U/ P
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  - f6 U  A1 l- R! u$ K
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式
    4 \$ ~% |" v: L& B# F. ]+ U
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   0 @# r2 u& u/ }
  11. //回傳解密後字串, c! O, e0 g( [: s! D% H
  12. return base64_encode($encrypted_toencrypt);  
    1 r$ U0 A/ d6 x5 X2 C
  13. }  0 g2 `% I8 x! A6 B7 T
  14. //解密函數撰寫
    * h2 K9 b' X) V7 @1 ^  F
  15. function decrypt($source,$todecrypt) {  
    : d, i; ~( k5 V( F& S" p
  16. //解密用的key,必須跟加密用的key一樣   
    . m1 }8 k" \) j# g
  17. $key = $source;  
      ?- J6 o  B0 G% K/ s4 [1 G' L+ p
  18. //解密前先解開base64碼1 e1 m5 {4 |( n/ W
  19. $todecrypt = base64_decode($todecrypt);
    9 w% x2 S" N* B9 Z
  20. //使用3DES方法解密
    ) O, W, c; K' a; g
  21. $encryptMethod = MCRYPT_TRIPLEDES;  2 o" q% k' D$ Q# {
  22. //初始化向量來增加安全性 2 L! E8 C8 T4 V, D
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    ) \. R/ Q, k$ q8 _: x) U: u6 \
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    8 `4 |* O5 \1 s) z! O6 F3 R% Q
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);/ K+ \9 L' [: B. J  `, o
  26. //回傳解密後字串
    5 |& n( g' q& Q9 n
  27. return $decrypted_todecrypt;  
    . b' @* C  ^% x3 J( Z! r6 E
  28. }  
    0 C2 I- Y( E# K. c6 |
  29. //寫好加解密的函數之後,就可以來進行測試了
    4 }8 I- z5 S3 B7 _8 f0 b
  30. //key設定
    ( l  b# H; l$ A8 @. Y# ?( T
  31. $source ="1234567890";
    & t" m5 R+ V' Y" N; W- z6 i; s
  32. //要加密的字串% b9 j' V; K0 O1 m) w- S  {
  33. $string ="www.av4u.co";% c' Q" z2 O, x- f+ Y$ I
  34. echo "string=".$string."<br>";4 ^) U8 w  D3 u- X8 B" }9 J- w2 @( ?
  35. //進行加密並顯示加密後的字串- e; |# p, j. V9 t( C' \
  36. $encode = encrypt($source,$string);
    0 j( R# {/ ^4 ^" j1 S  W
  37. echo "encode=".$encode."<br>";. ~9 a2 y9 d$ K9 b: M* C
  38. //進行解密並顯示解密後的字串
    7 t- h# L4 X% O
  39. $decode = decrypt($source,$encode);
    9 b( L% H; B7 _: ]
  40. echo "decode=".$decode."<br>";
複製代碼

$ e3 V! k6 g% {) |! M" i7 u
結果如下:

4 p* [" B1 z& T

% X( @" F/ Z5 X" f* I. U; v
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:

( \: w9 Z6 W4 ^5 i: [' k% z4 X# u





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