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

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

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

[複製鏈接]
發表於 2014-12-11 21:02:57 | 顯示全部樓層 |閱讀模式
tid=166& 本帖最後由 IT_man 於 2014-12-11 22:31 編輯 9 f' {, C4 M$ P/ l0 ?

, P$ X$ n# R" ?4 ]3 j+ W
由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:

- C1 F* R! ]: v( M9 {
  1. rpm -qa | grep php-mcrypt
複製代碼
+ ?, C! y) d. I! U/ |" `+ ?5 U
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module

- v; K- H' [0 p
  1. <?php
    $ y" C# n) I7 y8 }" p# S
  2. // Show all information, defaults to INFO_ALL, e  A7 I2 B7 a% `
  3. phpinfo();
    6 Y' o0 S3 l+ }. N8 P
  4. ?>
複製代碼

1 d' P9 X5 R* @2 B$ o. n然後於browser 執行phpinfo.php,結果如下:
6 K5 l# @, l4 I; P+ N
1.png
: }: d8 ?5 r5 _+ ?7 z$ V1 w5 _: |
2 x4 c5 H: M& o, @  ~5 v
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。
之後就可以撰寫加密程式如下:
& o' {# P- ~1 a$ _
  1. //加密函數撰寫1 l7 u8 @1 v" N4 G) }/ X$ q, U0 }
  2. function encrypt($source,$toencrypt){  $ Q) _. u0 g6 d
  3. //加密用的key   
    7 g/ i- p4 w/ }+ ?- @6 d* m
  4. $key = $source;  
      G  u1 q* ?, ~: p- g, c2 p
  5. //使用3DES方法加密   
    2 @  Z6 R3 Z8 H! I
  6. $encryptMethod = MCRYPT_TRIPLEDES;
    . @" R4 m: s* t% T% \
  7. //初始化向量來增加安全性
    1 k6 f& h, a% d9 a) U, Z& e. f
  8. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  ' [. c+ J% D) T0 U2 n
  9. //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式: P1 K: J  s" ~, I3 o* k
  10. $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   & l0 G. n  I2 G7 T
  11. //回傳解密後字串
    0 H9 ^. U- U8 _2 X& D
  12. return base64_encode($encrypted_toencrypt);  
      v8 f1 t( H" ]  L0 B; w
  13. }  9 Z/ A; X  m  g/ x! j4 F8 y
  14. //解密函數撰寫- i7 v/ V) x: G
  15. function decrypt($source,$todecrypt) {  8 a8 J  |4 B5 c2 U4 S
  16. //解密用的key,必須跟加密用的key一樣   0 T% L7 f2 k) o3 Y' D, I
  17. $key = $source;  
    7 b' }/ |8 c, {) _' Q
  18. //解密前先解開base64碼3 E7 i6 |$ ^( a  _5 y7 m0 N
  19. $todecrypt = base64_decode($todecrypt);
    ) a9 u+ p/ ~' Z: {7 G- b4 `& m9 A
  20. //使用3DES方法解密! R/ G" A8 P7 A' P5 B9 s4 k
  21. $encryptMethod = MCRYPT_TRIPLEDES;  8 K+ n/ ~- v- N: I  H4 _
  22. //初始化向量來增加安全性   g- y+ E( t6 l/ B/ H
  23. $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  
    ! c- r1 p( M) g# Q$ g, U, I
  24. //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  : t4 X" j, y( b, R
  25. $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);7 c2 h" w) H) p( P: a
  26. //回傳解密後字串2 o" ^' |( }. B; W7 x
  27. return $decrypted_todecrypt;  ( _+ a) d4 y2 w5 F% ?& C! h
  28. }  
      B, f; W' g- w' h% d7 a
  29. //寫好加解密的函數之後,就可以來進行測試了
    1 e7 k$ v0 h  ?# w/ ?: |+ R# o0 L
  30. //key設定
      Q; |: I6 j( M, _5 K2 `! G' u
  31. $source ="1234567890";# [; J8 a* o& U2 Z8 |& E6 l( N. e+ C5 L
  32. //要加密的字串
    . |, L, U$ {8 J' Y; W7 m+ _) t6 n
  33. $string ="www.av4u.co";% j/ k  W( @$ C7 ^, k2 d5 [: a& Z
  34. echo "string=".$string."<br>";$ [9 B6 n4 X5 D2 z
  35. //進行加密並顯示加密後的字串' O  N9 S- w& w6 w) h, R
  36. $encode = encrypt($source,$string);
    % C( Z" E& s/ Z8 j( E) Y" y
  37. echo "encode=".$encode."<br>";* I7 {- r2 h- j7 m7 M2 f2 L( N" O; j
  38. //進行解密並顯示解密後的字串0 m! G2 d" Z* E
  39. $decode = decrypt($source,$encode);0 C2 k$ @- E/ [( k  m3 O" s6 A! @
  40. echo "decode=".$decode."<br>";
複製代碼

& l# r3 {5 U0 c( |
結果如下:
$ G& p2 Y0 ^0 N% ^& V! |
1.png
$ J1 R: x/ x( A  D$ Z& z& [$ V' \
注意:
      如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
( n' a$ r: `+ R) N+ J
1.png
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 17:02 , Processed in 0.106688 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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