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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯
, U9 {0 @% p1 C6 N( i: l- r# v  B$ X4 d3 N4 R# a; s+ h
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

5 [+ a+ g  A; G- D7 q! ^5 ]; H) I
  1. rpm -qa | grep php-mcrypt
複製代碼

. {% A' d, O; v( v! J1 q6 k6 C或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
. U6 }& ~! R6 }0 _
  1. <?php
    ; b7 L1 v6 s9 Z
  2. // Show all information, defaults to INFO_ALL
    # O# @+ G/ Z) B/ w. [$ k/ m
  3. phpinfo();
    1 c/ N$ P3 d9 _  H( [/ ]4 X8 i- P
  4. ?>
複製代碼
3 z8 j7 d3 a1 [, B- J6 n/ u. }7 Q
然後於browser 執行phpinfo.php,結果如下:

% k' _" {/ ]! o& S  I
1.png
2 t1 _9 l0 R( S2 r, U

: v- ]6 T8 b% R! k. B4 }8 A
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
( g# X& J6 ]% E
  1. //加密函數撰寫4 l: }% _' Y4 h+ m) ]
  2. function encrypt($source,$toencrypt){  
    0 w" x! v. G# Q; M
  3. //加密用的key   ; T; d  T5 A7 W( N# ?+ w- M
  4. $key = $source;  
    ) J0 X& L# u5 Q$ K; h; A
  5. //使用3DES方法加密   
    0 o2 N/ U# b+ f% h6 ~6 ?: {# `
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    " Y) S$ s" ^, {
  7. //初始化向量來增加安全性
    " x; ^- _2 \/ a! T0 |3 o3 j
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
      L/ t! {1 d# {9 k: [
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式
    " p0 H0 r. q. F+ y- d7 s
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    0 q) |! ?) n0 ?1 H4 x
  11. //回傳解密後字串
    8 o, s( s( \# F0 a
  12. return base64_encode($encrypted_toencrypt);  ) @# }9 G" S8 p0 d2 M- _
  13. }  : @/ {$ d7 B2 U5 g9 o4 m& {7 p+ T
  14. //解密函數撰寫
    $ |8 U% Y% r. V- u9 }( y
  15. function decrypt($source,$todecrypt) {  
    - A. |0 Y/ k! @  m' a. U4 q
  16. //解密用的key,必須跟加密用的key一樣   : Z, \* G' X- B, u0 K% t8 e, O, o. o
  17. $key = $source;  " y5 Y) g! s& \' N2 r( g+ R
  18. //解密前先解開base64碼( b5 L" y6 {8 C, A0 M" y
  19. $todecrypt = base64_decode($todecrypt);" ?+ P2 [; L! M
  20. //使用3DES方法解密
    / u  `2 z4 q+ Z
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    : Y" U  }/ f- q5 V3 Z
  22. //初始化向量來增加安全性 : g. X. c/ \( q( O
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);    f. ^; S/ F- X4 [5 I- h1 h1 p
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  + Q5 I; s; L3 i# X
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);* B$ Y) I% o: g$ i0 n
  26. //回傳解密後字串
    4 Y- c5 B" A" l" m# q, p
  27. return $decrypted_todecrypt;  , P4 b& }/ `3 D( C( U- f
  28. }  
    ! @- Z3 d6 ]5 \0 c, p
  29. //寫好加解密的函數之後,就可以來進行測試了
    . n8 h' }5 s* j5 E
  30. //key設定
    + S8 d0 r& b2 N" `. G# z4 d
  31. $source ="1234567890";" f. g. }5 B+ D9 E# X9 l' O$ b: R
  32. //要加密的字串
    5 n& ~; n* Q, L1 a- v$ J
  33. $string ="www.av4u.co";
    8 d: _, P1 Q0 m* v7 @
  34. echo "string=".$string."<br>";
    % @8 g/ E; r1 T8 U( V' C
  35. //進行加密並顯示加密後的字串# `+ D/ N. Y( h
  36. $encode = encrypt($source,$string);2 ?+ m' X- o8 u7 s( Q% M
  37. echo "encode=".$encode."<br>";
    , X5 ]+ o; \+ a; [7 U" b+ x+ q9 U+ U
  38. //進行解密並顯示解密後的字串: v) P6 u$ B, g+ z* y* |* P
  39. $decode = decrypt($source,$encode);
    $ u2 U! E, q% h0 a- _% V) l
  40. echo "decode=".$decode."<br>";
複製代碼

3 R6 O' U/ G# ~. ]% U
結果如下:

, M  ~) e# x3 w8 @4 ?4 o$ r
1.png   v" A8 Z# d; S8 D6 J6 ~
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
3 ]- X2 u' j. O  h/ l7 s6 z
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2024-12-25 15:34 , Processed in 0.072713 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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