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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯
4 h. Y$ I! i* S1 y9 u: o* y. i4 a  S+ n4 q7 c
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

5 N5 m! Q( {+ N/ R' |  X
  1. rpm -qa | grep php-mcrypt
複製代碼
7 j( j7 B. b- f0 T! v) F
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
: ^$ i7 M' j0 W7 J% S" V
  1. <?php
    " V3 z1 i% S. T
  2. // Show all information, defaults to INFO_ALL
    3 Q6 B0 \! F: F5 q9 e$ Q; S
  3. phpinfo();" ?0 z& S0 D5 p* x0 j/ ]
  4. ?>
複製代碼

3 m6 r% n+ u, U1 C  J2 W然後於browser 執行phpinfo.php,結果如下:
5 d- D$ Y0 R, c3 q4 v! |
1.png $ @  R8 D/ h# L/ D5 r7 \

2 {* u' R7 o; ~9 V4 o) J. A) X
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
, C5 c+ W( H: L* ^2 }
  1. //加密函數撰寫$ }, z* Z/ W6 L8 m4 v4 _: ~
  2. function encrypt($source,$toencrypt){  / @/ C7 E. V' n7 A9 N7 B0 z+ e
  3. //加密用的key   
    . a4 H0 n0 y  n2 z( V# L9 B! b
  4. $key = $source;  4 o( q4 Z- a$ `7 t  d- b2 y
  5. //使用3DES方法加密   " c- s0 ?; ~( Q0 I$ s  D' X
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    3 M3 @9 W$ R. k5 a; o, N
  7. //初始化向量來增加安全性
    ' k3 R, t7 ]' b- ~
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  * O2 J& I9 v- v" e  i5 O8 L5 F
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式
    / O: q, {' i" C" v& [) B
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    ( t+ D8 A# j# m( j
  11. //回傳解密後字串
    ' m8 x9 {  s: S1 U! v# e3 n
  12. return base64_encode($encrypted_toencrypt);  
    6 j, |6 H* i2 A
  13. }  1 U8 Y7 _$ D7 \+ C* h8 i* F$ K
  14. //解密函數撰寫# h6 P: l& P; y6 r3 F
  15. function decrypt($source,$todecrypt) {  
    * X0 ~5 e3 [% j- O! @! u8 s
  16. //解密用的key,必須跟加密用的key一樣   
    0 ]% `8 d# w* {% ^
  17. $key = $source;  $ g9 E) t; r  N/ h/ _% v" U
  18. //解密前先解開base64碼
    ! Z* a3 B9 Y! f5 s5 u: I2 s/ X7 \
  19. $todecrypt = base64_decode($todecrypt);% P& a- z9 _, I; i
  20. //使用3DES方法解密. }' o& R2 q. I
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    6 u9 Z- E5 P0 D
  22. //初始化向量來增加安全性
    0 D8 I& \3 ^  i: G. H7 Q/ j
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  % D* j$ }0 P5 O0 O
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    * S" }9 z  v2 s& |$ X: @+ u
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);# K* N( ]* U$ I* ~' D' G- f
  26. //回傳解密後字串. S, k; |7 |% Y2 H- {3 m* o' B
  27. return $decrypted_todecrypt;  / v- r" s9 D( w8 Q2 Y7 G
  28. }  
    * e! o" I5 u* k" H$ q0 H
  29. //寫好加解密的函數之後,就可以來進行測試了0 s  b, M5 t2 s
  30. //key設定. n9 x6 d. G2 @( z
  31. $source ="1234567890";
    6 @0 `) R  `; M5 E6 O
  32. //要加密的字串# d" W  ?3 M$ J7 C/ r
  33. $string ="www.av4u.co";5 W" b7 U7 K, m9 k
  34. echo "string=".$string."<br>";# ?' s' \/ F) h) C
  35. //進行加密並顯示加密後的字串
    3 w4 Y" S/ ?2 l+ y
  36. $encode = encrypt($source,$string);
    # n' w) i- v  D
  37. echo "encode=".$encode."<br>";1 k5 v1 d3 w9 N2 i( P. S
  38. //進行解密並顯示解密後的字串
    + s8 J( }: R' x) Q, L& h& e7 p! ?; v7 T
  39. $decode = decrypt($source,$encode);
    8 S& r+ E# A9 A9 U/ ]0 U* c
  40. echo "decode=".$decode."<br>";
複製代碼
% O3 ?% R4 z0 d7 y
結果如下:

3 t5 K8 b$ d) C4 P; N+ f( a. T2 I
1.png   I# F# C( b* t7 K- ~5 \. M
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
: a6 _# N% t+ K
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-2-4 08:07 , Processed in 0.072866 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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