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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯
8 `8 a1 T& U* }0 B8 t
" b) F& f8 Z( P9 x6 y/ K. S1 k
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
" Q& ~* E! t, S; r
  1. rpm -qa | grep php-mcrypt
複製代碼
' X6 G& S* @+ @; r" Z% V
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module

1 `9 |$ N8 }: s! n! Z3 p# S/ n
  1. <?php$ \1 l' D# I6 h
  2. // Show all information, defaults to INFO_ALL
    ! ^% X8 C9 J5 J& `) |
  3. phpinfo();
    6 q# K6 _5 c) Z5 H5 v0 Z
  4. ?>
複製代碼
. ^6 o3 C+ D8 r) @# A/ |
然後於browser 執行phpinfo.php,結果如下:
2 j9 D# W, S: y+ G- h$ Y+ W3 B1 V
1.png   p" x6 b. V9 K2 u+ y1 n7 i& @! {

% ?9 h, |2 T; v* s
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
3 o9 T5 E1 c3 M3 ]2 [
  1. //加密函數撰寫1 I; z- w+ ~/ [# B
  2. function encrypt($source,$toencrypt){  ! A4 E3 {0 i5 |$ y
  3. //加密用的key   
      A7 |1 P3 p& q$ @7 y- g0 t
  4. $key = $source;  
    1 _! F3 x( j) Z) N  G& a" w
  5. //使用3DES方法加密   
    4 O; {! O& F/ f2 x' `
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    & t' d  M- Z9 w0 ~3 G
  7. //初始化向量來增加安全性
    % }$ A/ X, F% {* Y
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    , R- a% ], _/ l
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式+ B1 T7 a1 X. g8 {) |" b
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   ' l# t3 \: C$ u0 ^' Y7 M
  11. //回傳解密後字串
      M' o+ Z. ?$ r( D1 D" A
  12. return base64_encode($encrypted_toencrypt);  ( _) c' W- Y+ A' c
  13. }  
    + |/ b$ |# Y' n- h8 u
  14. //解密函數撰寫
    " X% K% H1 g4 y9 E
  15. function decrypt($source,$todecrypt) {  4 {$ T0 {& c4 l
  16. //解密用的key,必須跟加密用的key一樣   
    , d8 n) m! p$ N- n6 C" q, @# a
  17. $key = $source;  
    9 k! \2 V4 K0 s
  18. //解密前先解開base64碼" g4 t6 u9 U8 Q1 \7 F/ v  ?* k
  19. $todecrypt = base64_decode($todecrypt);
    " C9 I, g! P; @
  20. //使用3DES方法解密
    / k9 J; [, [1 `& N/ f% L9 H
  21. $encryptMethod = MCRYPT_TRIPLEDES;  
    0 j# ^4 H4 A- Q6 P% o" ?: S# F
  22. //初始化向量來增加安全性 1 N' A1 Y+ p* z1 Z! x! X
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  ) o- a' v4 B7 m' R
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  9 e0 i& O3 e$ j! A/ s0 ~
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
    5 `. F9 X: {. n# d4 a# O
  26. //回傳解密後字串
    $ i; b7 M2 Z% |; ?; @
  27. return $decrypted_todecrypt;  4 Z3 U9 o1 D8 w* f
  28. }  
    - B% N  j5 \1 h0 ^
  29. //寫好加解密的函數之後,就可以來進行測試了+ A# l7 F9 k. U9 E( ~1 @1 h
  30. //key設定' j# n% n; z& p
  31. $source ="1234567890";
    0 l) U$ X0 x/ X, @! q& R2 M, i
  32. //要加密的字串  ~' c5 e8 ]6 Z0 ^% Z- l( l* I, Q- j) ^
  33. $string ="www.av4u.co";
    - A4 u8 D% K4 ^2 I9 `! F
  34. echo "string=".$string."<br>";  D) ^- b6 a: ?$ |# Q& E. Z9 M
  35. //進行加密並顯示加密後的字串
    9 o% Y. f  T" w1 D
  36. $encode = encrypt($source,$string);
    1 M) B* j/ ^( N! _% a2 \; u( |: f
  37. echo "encode=".$encode."<br>";2 K8 D1 J5 z% M- z6 k6 h
  38. //進行解密並顯示解密後的字串* V( a( [0 v2 O2 n- A) m1 t3 N' C
  39. $decode = decrypt($source,$encode);9 X4 P2 O* ^3 F( e, x+ I- }
  40. echo "decode=".$decode."<br>";
複製代碼

0 C4 q6 k. |6 \' a' x  v& v
結果如下:
+ y: V: Y0 \/ _: C4 n/ M  U" ~4 z
1.png
/ I- l9 S! u6 ?" B2 o# z, e, m
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:

# p2 W! U1 F4 ~" O2 S
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-5-7 21:22 , Processed in 0.077264 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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