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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯 " `. I2 R" y  Y2 n5 |( X

! K3 A( X1 N; Z( H; ^7 Y- x
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

) j7 P, Q/ I+ O9 \# {( c2 Q' i3 U
  1. rpm -qa | grep php-mcrypt
複製代碼
4 u# t2 t' s" D9 k2 j# b
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module

5 k: i* _+ z5 a! v6 F2 I4 b
  1. <?php8 ^5 I7 v- u8 Q% J
  2. // Show all information, defaults to INFO_ALL6 k& R/ G6 L; y% I) b* U/ ]
  3. phpinfo();8 C) }2 {% W9 i: f  z. c. M
  4. ?>
複製代碼

. Z5 M' N/ u% |然後於browser 執行phpinfo.php,結果如下:

5 _7 v) u0 e( ]1 e+ R
1.png
4 x  r! f+ ]& d$ T5 E5 e
# |; H1 u6 f/ u
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:

2 S8 i9 w/ ?8 ^- N+ v& r3 `& M/ i
  1. //加密函數撰寫8 b4 y! |0 @& |/ U8 z
  2. function encrypt($source,$toencrypt){  
    - I# h7 V( h: a, @0 a/ [$ o% M
  3. //加密用的key   " t' ^4 r' s$ ?1 I
  4. $key = $source;  
    ( L( M& c; W0 Z+ C! N6 n2 V
  5. //使用3DES方法加密   & [0 e2 y. f+ G
  6. $encryptMethod = MCRYPT_TRIPLEDES; 5 ]# D% L* [8 ]% p& H/ E1 _; R
  7. //初始化向量來增加安全性
    6 V5 ?8 w4 k: Z0 w
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    " W. I) ^7 e) O+ H
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式
    + h& D2 q1 \, I
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    * L" Y6 X! F5 g7 _% p- Z, v2 `
  11. //回傳解密後字串( X: P, ^; g$ D8 f2 Z7 r1 Z  I' k' |
  12. return base64_encode($encrypted_toencrypt);  
    & b& z: Z2 T, [5 A+ v0 u
  13. }  
      z/ ], c3 J2 ?/ y
  14. //解密函數撰寫6 @( _4 T+ ?9 f/ m. L
  15. function decrypt($source,$todecrypt) {  
    : F0 I, N1 P% u
  16. //解密用的key,必須跟加密用的key一樣   0 l, @5 r7 J6 G& X4 \4 o, [
  17. $key = $source;  ; k+ m( U3 Q3 v& y# x
  18. //解密前先解開base64碼/ C) W% m1 J+ B9 x1 ~
  19. $todecrypt = base64_decode($todecrypt);
    2 k% G6 @# n+ X) n- J# U
  20. //使用3DES方法解密
    4 b& `+ V% P! y0 ^  }1 ^& G' _0 {
  21. $encryptMethod = MCRYPT_TRIPLEDES;  , }& T8 H8 C; c
  22. //初始化向量來增加安全性 ( e& [! j1 S9 R# S
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    % `$ O: E5 Q* H
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    / v& U3 l' Z3 a7 z
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
    $ Y/ S0 O( j- X* e4 g  r
  26. //回傳解密後字串0 X& o/ v9 a9 @4 |3 C& t
  27. return $decrypted_todecrypt;  6 }8 d/ `3 h7 N7 L0 R
  28. }  7 q$ e* {* `7 H. Q0 t+ D( F
  29. //寫好加解密的函數之後,就可以來進行測試了
    , O& i8 w2 t2 y# A% j2 G
  30. //key設定
    , m1 }; @/ l6 u% k* B
  31. $source ="1234567890";( I$ B$ i6 r; `5 ~9 y6 q
  32. //要加密的字串
    . d; ?7 e, C) A' N5 Y
  33. $string ="www.av4u.co";
    5 A9 V9 B0 R& n( r) e. W8 x
  34. echo "string=".$string."<br>";: L7 @, p" U; ]/ t8 ?: S2 D
  35. //進行加密並顯示加密後的字串
    9 X" ]$ q' a) V" I) d
  36. $encode = encrypt($source,$string);
    , n( F, B4 w1 j% f# x  U! _' P
  37. echo "encode=".$encode."<br>";' X& V4 R" K3 G. [. t$ B% W. E
  38. //進行解密並顯示解密後的字串
    - I6 ?  ^3 a* f2 x( H) r" Y
  39. $decode = decrypt($source,$encode);, {" ^( T2 J1 j4 v& T
  40. echo "decode=".$decode."<br>";
複製代碼

, K) G# ?! }0 X
結果如下:

2 N! O3 \8 M) c) o
1.png ! G( k' B; f2 s$ r; s  \9 V- f
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
$ N% O# S6 B& V, ~5 E
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2024-12-25 16:11 , Processed in 0.068302 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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