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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯
7 v/ }) N9 |. I4 R
6 f3 o9 C6 g; ^, @
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
% R: q* g2 M" I( h' }7 C" J
  1. rpm -qa | grep php-mcrypt
複製代碼

* s' J% o9 m7 t4 a0 l或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
7 l: {: E. M% q) E# b3 Y& V% T) f7 e
  1. <?php
    + D' W* r5 p. p2 ?2 E
  2. // Show all information, defaults to INFO_ALL
    " J) R1 }2 B* T' f
  3. phpinfo();
    # W+ f# {- a" n
  4. ?>
複製代碼

; ^0 B" x- e9 H然後於browser 執行phpinfo.php,結果如下:

8 \* q9 e5 D) w7 j- s5 L
1.png
$ ]5 ?4 v. j- p) j1 g: C) B0 x8 a
' q, ~$ @/ M- F6 F
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
6 ]- K1 ~0 U3 i; t
  1. //加密函數撰寫
      I' N7 [7 @5 }! E. C$ ^% ?9 T7 a
  2. function encrypt($source,$toencrypt){  3 r/ ~* O1 i( h/ A( N% K
  3. //加密用的key     Q. K0 v* K, I: l% x9 e( r
  4. $key = $source;  
    - `% Y# g1 m5 D! H& q
  5. //使用3DES方法加密   
    % o1 Z5 w: _/ w; M9 k# r6 w0 T
  6. $encryptMethod = MCRYPT_TRIPLEDES; ' w+ Q+ k( R. k  a
  7. //初始化向量來增加安全性
    # |" J, }# ~) K) ~
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  3 H& A; H- r3 Z
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式/ v) {" C: p/ p: T* K1 I: u
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   ( U% [8 r- y; ~% x! S( r
  11. //回傳解密後字串% o5 T, l4 O8 g8 P7 }1 v* K' O# a
  12. return base64_encode($encrypted_toencrypt);  
    + t. i- B7 ?2 ]& I
  13. }  : B/ y% Q9 t" V) n8 [2 g, B
  14. //解密函數撰寫
    8 o& K  [$ c, C. O
  15. function decrypt($source,$todecrypt) {  
    / ^4 C6 q: k5 B& r! G5 f
  16. //解密用的key,必須跟加密用的key一樣   
    % h1 t5 L% |  p. B" E' [# I# h5 d+ U
  17. $key = $source;  , ]2 B# z1 b/ N5 s" }: b: q% s" n
  18. //解密前先解開base64碼$ \$ G+ y) k$ y: [4 G. [
  19. $todecrypt = base64_decode($todecrypt);# \0 u/ Z* j3 q  s' W
  20. //使用3DES方法解密
    1 z: \' F3 g7 P5 g$ q
  21. $encryptMethod = MCRYPT_TRIPLEDES;  8 S% W+ F" q; X: x
  22. //初始化向量來增加安全性 - C3 n8 p' p4 l. v5 ]
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  * |* f% H& m& c' F( Q  B+ T
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
    - u: `  B; h8 C% d& p$ s# ]4 `
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);0 l& ]- W1 L" V& ?; G
  26. //回傳解密後字串& `. h4 S' i7 `& S0 i: n+ X1 \6 s
  27. return $decrypted_todecrypt;  + @8 o# `7 w; W$ g
  28. }  * h$ \- X8 a& p3 w8 P
  29. //寫好加解密的函數之後,就可以來進行測試了
    / ]: ^( J3 o$ e9 A8 V1 t
  30. //key設定; \( ~/ |7 z  r7 t0 }4 G: H$ K
  31. $source ="1234567890";6 o/ k3 w+ Y  `+ l
  32. //要加密的字串; o% q. e% p% P* W
  33. $string ="www.av4u.co";1 M1 o5 v4 ^* a7 g8 y  y
  34. echo "string=".$string."<br>";* B% t2 _1 O, ]: x+ z
  35. //進行加密並顯示加密後的字串8 r( G. L4 {7 F: y4 J; `; u
  36. $encode = encrypt($source,$string);3 d' {6 e4 B1 V3 P. U8 Q$ K) G
  37. echo "encode=".$encode."<br>";
    9 B/ I% k' ]9 S4 x5 b
  38. //進行解密並顯示解密後的字串
    ( D, q0 G+ U: |. r2 s
  39. $decode = decrypt($source,$encode);
    6 g/ p9 u9 H. e! a5 f
  40. echo "decode=".$decode."<br>";
複製代碼
! X0 o0 V& u7 Z* x* F$ p  ?
結果如下:
4 m, z- ]# @( d4 W  X3 D
1.png 6 y) p# G+ }* K. S0 F
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
% P1 T0 d  b! j! |' Q0 a
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2025-4-6 01:35 , Processed in 0.061293 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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