52AV手機A片王|52AV.ONE
標題: Linux下以PHP撰寫 3DES(mcrypt) 加密方法(ECB模式) [打印本頁]
作者: IT_man 時間: 2014-12-11 21:02
標題: Linux下以PHP撰寫 3DES(mcrypt) 加密方法(ECB模式)
本帖最後由 IT_man 於 2014-12-11 22:31 編輯 $ g) A, E. F- i$ b( B% f2 w# D$ V
6 \: y1 ?5 U; g' Z+ k& Y7 N. h, j由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
7 m- T) n/ A+ |$ l' s. ^. \* C
- rpm -qa | grep php-mcrypt
複製代碼 " n$ R' [" E2 l5 q
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module
7 ~) D9 e" k [3 B) |1 Z7 x+ [1 I4 l
- <?php6 x C! A- W2 O# @* p5 Z
- // Show all information, defaults to INFO_ALL, E2 ?' {, c8 K" D5 n& W
- phpinfo();
! h) k' a+ n I! N' `" o$ { - ?>
複製代碼 5 D" C, A) p$ v
然後於browser 執行phpinfo.php,結果如下:6 q1 m; }% ~& Q; D; ~- r' N
* k, d( Z- w1 ~
( `. ?# Z* B. F% Y7 n, d
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。 之後就可以撰寫加密程式如下:
$ w, I: k1 @: Q3 C: F2 T9 H! {
- //加密函數撰寫
3 l/ `; L' P( U9 B9 O - function encrypt($source,$toencrypt){
% t2 Y$ G. J6 @: y - //加密用的key
9 L p$ b) ]2 x' B3 J* c& m - $key = $source; ; n2 n$ p4 v+ D) }* d$ |% b
- //使用3DES方法加密 ; I1 x- P( B- W6 v4 s4 \
- $encryptMethod = MCRYPT_TRIPLEDES; " Z* t# h" e2 F
- //初始化向量來增加安全性; n+ w1 P( p9 o' d2 ]
- $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);
( F' A! O' r1 M$ E6 w - //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式; p0 B% Y6 @1 ^. N6 {, ~9 k
- $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv); 9 Q. U; z* m0 `6 \8 A
- //回傳解密後字串
- u7 R+ i5 L' G( {$ d) u! J( D& [ - return base64_encode($encrypted_toencrypt);
! A" x3 u, Z) l& J- q - } - C, ]1 G/ L: f) Z4 x7 v0 { f% C
- //解密函數撰寫
8 D1 a8 [% ~+ C g) e% `& O7 w - function decrypt($source,$todecrypt) { 4 V: a M# _3 R8 E' g# O
- //解密用的key,必須跟加密用的key一樣 7 O1 L; ~! }# [( n/ k( W' S9 o
- $key = $source; , e1 {6 v" ? }& S
- //解密前先解開base64碼
/ b) h. _$ w c4 S. T5 o+ T - $todecrypt = base64_decode($todecrypt); G6 R: S% S$ E. n
- //使用3DES方法解密$ T+ ]4 a3 p$ [8 e# s
- $encryptMethod = MCRYPT_TRIPLEDES;
& {5 x, n9 U( h* n4 b3 F - //初始化向量來增加安全性 : M' N1 m# L+ ^* Z: m
- $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);
3 N0 A* a( Y1 H, V' y) @ - //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式 ) X# H5 n3 g( Y. M w( p7 a# s
- $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);9 j& U# Y' R% @1 }
- //回傳解密後字串
8 X# N8 P. e7 |% d$ t - return $decrypted_todecrypt; 7 T; y6 u& k! O* U) J* \$ c
- } 7 K$ F# @* X( B! O4 N
- //寫好加解密的函數之後,就可以來進行測試了
8 |6 l+ P A5 M* l - //key設定
; T4 O8 \5 V; K7 Y" @: g. o3 k4 T - $source ="1234567890";# Q2 y& u' M, \
- //要加密的字串! P4 z- X' Z6 X ]
- $string ="www.av4u.co";
% \- t' b) ?* i3 G3 j - echo "string=".$string."<br>";' r4 \0 N0 L8 |6 I. K! i+ O) A
- //進行加密並顯示加密後的字串, q% r. e. l* V
- $encode = encrypt($source,$string);) J3 p+ e# c* W% g
- echo "encode=".$encode."<br>";& z$ C4 C$ u3 b; z9 t4 _% {$ ]2 ?
- //進行解密並顯示解密後的字串6 S; Q; S3 W# g# V% V; f& h
- $decode = decrypt($source,$encode);
! _0 D1 N9 [9 h - echo "decode=".$decode."<br>";
複製代碼/ p( f/ y# ^4 ]: [; f
結果如下:
+ ?; O6 b0 h4 w: ]& a7 ^2 }
, u& u H6 c9 g$ Y; m; N
注意:
如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
! A% z4 L5 n# S
| 歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) |
Powered by Discuz! X3.2 |