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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯 1 ^% k5 }: s: Q. Z3 F$ ]0 ?

5 r, ], |4 p4 l/ E
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

2 v8 b. I& L2 n; b: @! ~$ ?
  1. rpm -qa | grep php-mcrypt
複製代碼
/ x/ Z1 T+ I. r6 x+ W1 g( f! T
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
" B+ g2 t# [6 d" U+ V" J4 p
  1. <?php
    * p$ U" o# L. O9 ~# X- T2 S" @
  2. // Show all information, defaults to INFO_ALL
    # h& G) X0 |0 p7 A  c) V
  3. phpinfo();
    & M$ P' {, T; r7 v, T8 f' A
  4. ?>
複製代碼
# k% Q  Z/ [5 f* W5 {: f
然後於browser 執行phpinfo.php,結果如下:
. z$ N: @0 B, t' x; u7 [) D- U
1.png
6 V) e7 z4 l7 N
9 @: ~8 X( z- Q
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:

+ {- H) G/ \/ p6 e
  1. //加密函數撰寫
      w# F5 v# i9 {7 E" `: }1 V' K- W
  2. function encrypt($source,$toencrypt){  5 r9 ]- L0 Q+ s
  3. //加密用的key   # \( ^. ]: J! `4 U
  4. $key = $source;  * Z5 }0 A  V0 m* Z9 _- Q
  5. //使用3DES方法加密     @, r  G; V4 V1 o# s
  6. $encryptMethod = MCRYPT_TRIPLEDES; ( b3 s! M; g0 Z
  7. //初始化向量來增加安全性
    & c& s, ^3 i; K2 i) O7 w
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    : }) N! l6 Z) A, L/ I" \) m% }
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式- }7 [: ~* d+ ?$ l  \
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   9 j3 R8 g* S7 {  K* C- q" p
  11. //回傳解密後字串1 H" {) N) F* ]8 I
  12. return base64_encode($encrypted_toencrypt);  
    ( c% |& |) d& x0 m
  13. }  
    5 U$ A( Y5 x! A. W  d" @
  14. //解密函數撰寫1 z- ?- M$ J' [1 \- }4 h$ S# B
  15. function decrypt($source,$todecrypt) {  ) \  g5 Q2 G. c9 i$ l$ t2 v
  16. //解密用的key,必須跟加密用的key一樣   
    1 ~2 V, w6 l4 |+ q- j
  17. $key = $source;  
    3 W$ a& u+ U. n7 q2 l; i
  18. //解密前先解開base64碼
    ; H. I* [, {9 T" ?
  19. $todecrypt = base64_decode($todecrypt);
    ( r$ N3 |5 }: c8 M" v% x) c0 \  H
  20. //使用3DES方法解密" a$ Z1 Y4 c* z3 I
  21. $encryptMethod = MCRYPT_TRIPLEDES;  8 F# V) \. s9 k8 Q( V$ T* m
  22. //初始化向量來增加安全性 ) m% D5 t! s+ O" I9 ~" O- \
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    , K* p) a; @6 |/ B% O# g
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  $ D# W3 V4 K0 n7 \
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
    5 D5 s6 T0 I& k
  26. //回傳解密後字串
    ; z0 G/ z- a1 f
  27. return $decrypted_todecrypt;  
    . }8 `; d9 D$ y* O7 j1 E
  28. }  
    5 c$ x5 d: q3 v; E$ c! B% _. ]
  29. //寫好加解密的函數之後,就可以來進行測試了
    % v' j; T. C& K, Z
  30. //key設定
    $ {. |; l( a  y8 G! W) r
  31. $source ="1234567890";$ [# K! L) e1 L- M
  32. //要加密的字串
    ! {2 }. _' q! X2 M  d/ f$ A# [/ z
  33. $string ="www.av4u.co";
    " ?% H: k. `2 h7 b0 P0 Q9 _
  34. echo "string=".$string."<br>";
    6 H& p# f- a2 |0 f& g& Z% x7 J
  35. //進行加密並顯示加密後的字串
    * u6 c, Y: i& b
  36. $encode = encrypt($source,$string);
    / H% U4 d& K( g. v8 k4 c- F: V
  37. echo "encode=".$encode."<br>";  I( c/ l" z2 A& Y5 }
  38. //進行解密並顯示解密後的字串" m4 P/ Q$ F# j1 b+ w
  39. $decode = decrypt($source,$encode);
    ' O& x9 o5 O6 k
  40. echo "decode=".$decode."<br>";
複製代碼
; a- A+ N8 w7 a6 y& `; ?( J# t
結果如下:

8 T( v0 @4 q) h3 j& ?9 `  @$ _
1.png 8 O6 j9 d( n2 a- z9 U
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
8 j. Q) }# p0 M( ^  d& @7 ~( U
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2025-12-6 19:20 , Processed in 0.049389 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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