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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯 : }& n0 p; e  W. U9 ^7 ?
0 d) f- m4 l. a/ M6 E
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
6 N2 h9 Y, {9 \& d, k' o
  1. rpm -qa | grep php-mcrypt
複製代碼

1 R: o6 D2 G: o! S  ~或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
- S6 m3 e0 m# J( @! |+ _) c/ U* A
  1. <?php
    " T( q9 P0 d) w& `4 z! t" i
  2. // Show all information, defaults to INFO_ALL
    % X# m0 R! c+ M, h! O+ [  l+ i
  3. phpinfo();0 V9 c3 l2 f& Y0 Q# o$ o7 V/ ?
  4. ?>
複製代碼

) W6 u* [2 k* ~1 X+ l' ]8 p& N然後於browser 執行phpinfo.php,結果如下:
" r' Q$ y8 w  V6 O& y3 l
1.png 8 V: {- r# o& F# c# y# h

; ?3 Q4 R" O) y$ U' V- p, }: z
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:

1 K! N5 Y3 ?( o) H5 i8 o  r
  1. //加密函數撰寫, W8 H5 }( X4 g6 ?
  2. function encrypt($source,$toencrypt){  
    3 b* l( L/ Y. O
  3. //加密用的key   
    % ?6 J8 D9 ?8 h0 g! r; D
  4. $key = $source;  ) U4 D6 `  d2 s' S( M. a7 U
  5. //使用3DES方法加密   
    / j3 R! {  t% k# N
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    , v- g7 ?& k0 ~% H- F
  7. //初始化向量來增加安全性
    3 d( f/ g, I' B# d
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    0 E! p% |* |+ Q3 i
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式, \9 J' z! a( r
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   " W6 `7 G) Z2 @6 ^7 z; L# k% k
  11. //回傳解密後字串
    # n, u! H& X+ L! a
  12. return base64_encode($encrypted_toencrypt);  + ?5 Z4 ^6 {7 G  R! _$ j2 z
  13. }  
    6 l) @. u- q3 l, A) `
  14. //解密函數撰寫
    6 ~% W  C- Q8 f4 D; a+ L
  15. function decrypt($source,$todecrypt) {  
    . Q+ m) W1 ]+ g
  16. //解密用的key,必須跟加密用的key一樣   
    6 c' W, Z. n8 @" _
  17. $key = $source;  
    3 K/ g( ?# s! @, H2 i( }
  18. //解密前先解開base64碼
    : A/ ~# g& [" n4 \! a+ d" ^8 f
  19. $todecrypt = base64_decode($todecrypt);
    ( {6 D$ I, Q! {# o& ]
  20. //使用3DES方法解密9 E, f. z% \' u4 s* q$ O+ ]: i
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    : z7 B: Z8 Q4 y1 T) w( |
  22. //初始化向量來增加安全性 ( m" y' m/ k. s! F. W
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  7 a4 p6 I4 k8 f
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  % P0 l* p$ D; e- f# c
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);5 D7 N2 m7 o& K% l- i8 ^( U
  26. //回傳解密後字串  `, n2 b  b) {% d
  27. return $decrypted_todecrypt;  
    - n( c) ?5 J# y! g, Q5 Q
  28. }  
    ! W9 A7 p' N8 l) a; z) D
  29. //寫好加解密的函數之後,就可以來進行測試了
    $ [9 B# M3 O; S( u) i
  30. //key設定% N: p% Y: q  \3 B
  31. $source ="1234567890";
    . u. P3 j- y1 Q; m: {5 Z
  32. //要加密的字串( b8 j" k& N; n
  33. $string ="www.av4u.co";
    / {1 d; u; O2 E, b" ]6 [& q- A: y
  34. echo "string=".$string."<br>";
    9 K8 o4 l* T& S9 b& k) L
  35. //進行加密並顯示加密後的字串# ~  h7 f, |  \' G1 r
  36. $encode = encrypt($source,$string);
    6 r/ k9 O3 @; Y5 D# d
  37. echo "encode=".$encode."<br>";1 J$ ~- n8 a* w
  38. //進行解密並顯示解密後的字串
    1 b; d# f: _. K5 L  q) H/ }, H
  39. $decode = decrypt($source,$encode);
    , S& N# D5 Y7 s( Z- \
  40. echo "decode=".$decode."<br>";
複製代碼
% j$ I7 ~; G* n
結果如下:
3 r+ z1 k8 v- G& A
1.png   z) m1 R( C9 q" u( f+ J
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
# C( {* ^2 `4 R7 `7 n6 W  |
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2025-12-6 18:27 , Processed in 0.055728 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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