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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯
  \3 q' J* t. K+ Y) X- `' P" e) A8 l
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
9 D: D# u4 `9 A9 u. w
  1. rpm -qa | grep php-mcrypt
複製代碼
& W8 z" O! B7 Z: H- E
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module

" m1 Y! J2 ^6 m7 t. X, h
  1. <?php; |( A. o) \! Y+ a1 @
  2. // Show all information, defaults to INFO_ALL; R: i7 M" Q' ]5 @
  3. phpinfo();
    9 N5 V% c9 s& x4 P
  4. ?>
複製代碼

2 j3 B0 y5 I1 k4 d- r然後於browser 執行phpinfo.php,結果如下:
+ T' H, c+ ]& z# v, k% W
1.png % q" ^1 h! T  h. X/ b: Y) J( Y- b

! I" S! l0 P' T. f" C
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
8 d, t* z6 Y; j4 z7 ]; a' Q7 {1 M
  1. //加密函數撰寫
    ' ^# [' U# |6 g* C
  2. function encrypt($source,$toencrypt){  : O4 v1 |: C0 m, {6 P* ]- _
  3. //加密用的key   
    * J3 s' @0 ^" L" h$ n  y
  4. $key = $source;  
    4 v" f4 \" l, M% r; M
  5. //使用3DES方法加密   / H; B6 X2 e# k. A
  6. $encryptMethod = MCRYPT_TRIPLEDES; / P- c& z9 ~3 V
  7. //初始化向量來增加安全性1 h& W8 p8 S) f6 V& Z$ H- i
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  3 l' v5 [6 n' E6 Q+ r' e
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式. U( ]; i3 R# I
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   
    9 a1 X( B5 r1 D7 Y  Q! p4 M
  11. //回傳解密後字串/ `! I( p# o4 z7 g/ R9 d
  12. return base64_encode($encrypted_toencrypt);  
    0 t- ^% Q6 y* h# u, a4 E3 N
  13. }  6 R0 I; V# L0 X( C4 G
  14. //解密函數撰寫
    " z# S1 V$ @' K) w& M, I6 f
  15. function decrypt($source,$todecrypt) {  
    . ?2 v; ?. M- X& a
  16. //解密用的key,必須跟加密用的key一樣   6 x% O! }* Q1 H
  17. $key = $source;  
    / E$ V: V, ?% d  u# X4 `. y
  18. //解密前先解開base64碼/ o" T& C0 f1 p: t( \8 y
  19. $todecrypt = base64_decode($todecrypt);& v6 X- |) i: {4 c8 [$ q( a* x
  20. //使用3DES方法解密
    ) M# ?8 k+ H$ S" m# k  U
  21. $encryptMethod = MCRYPT_TRIPLEDES;    \6 p+ J- O# V0 W8 I1 ]: [
  22. //初始化向量來增加安全性
    3 E4 g8 c2 n4 [6 T. [# K0 l; V
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  6 {4 D9 h; m7 p6 D; W
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  
      H! u! a2 T( F
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
    & E1 N) i6 B" {; [" a6 A6 f
  26. //回傳解密後字串1 v7 m0 h. A4 p  ~0 m3 ~# w
  27. return $decrypted_todecrypt;  3 S4 X9 K8 E% b. P. |
  28. }  - t. a5 \$ @9 M& a7 G
  29. //寫好加解密的函數之後,就可以來進行測試了
    ( C2 m. i7 i8 a
  30. //key設定
    + [4 B2 W% x* U2 K
  31. $source ="1234567890";( E9 o8 v' ^8 w
  32. //要加密的字串
    9 B2 w8 m. ^) |5 u& R7 L6 w* K
  33. $string ="www.av4u.co";& l% g7 Y: \( @1 j6 u+ C
  34. echo "string=".$string."<br>";
    ! G* T9 q& z# W( r' C# u+ O
  35. //進行加密並顯示加密後的字串3 D( Y2 O) F" H1 B8 N" g
  36. $encode = encrypt($source,$string);
    0 _* b9 Q- B% y3 O& \
  37. echo "encode=".$encode."<br>";
    ( _4 L+ b4 ?1 L! z. T0 y
  38. //進行解密並顯示解密後的字串  r( u: f6 ?/ M1 O0 j) d2 Z/ w2 A0 {
  39. $decode = decrypt($source,$encode);
    / ]  O9 o+ x% q$ r
  40. echo "decode=".$decode."<br>";
複製代碼

) P( z* T* A0 C9 p3 ~+ R3 W- c
結果如下:
3 _9 Y$ M' z) f# S# Z
1.png , u! M  d/ ]/ b: Q
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
8 R  J* i6 S! r* x: u4 u8 j
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 19:58 , Processed in 0.072763 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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