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 編輯 ) `! t8 w# i3 z3 ~ Z5 p
2 E: ~0 z3 @, x由於敝網站文字加密的需要,需要複雜加密的演算法,因此選擇3DES加密。
3DES加密(Triple DES),是三重加密演算法的通稱,而3DES共有四種模式,下面介紹的是ECB模式的寫法。
首先先檢查linux是否有安裝mcrypt模組,方法如下:
6 D- b5 v5 H; X/ I+ u3 t3 e4 O
- rpm -qa | grep php-mcrypt
複製代碼 ! r! y1 K& Q) I+ x' {& d
或在你的網站建一個php檔,如phpinfo.php(內容如下)查看是否有mcrypt module0 J& _. w2 N# o* W/ ?1 V
- <?php
# L' ]6 d( p5 l2 O8 C3 D z - // Show all information, defaults to INFO_ALL" M& j5 i* h& n
- phpinfo();
- N) a: A* @7 p$ u+ v - ?>
複製代碼 ( [: M1 U; X# w. |7 E& L9 Z
然後於browser 執行phpinfo.php,結果如下:7 ?! V2 U' J+ i! w) B( O) u% ^5 W
- L, U7 {. a$ o$ D 5 L, j6 j) }+ I9 V4 L! \2 I
如果沒有安裝php-mcrypt,則進行安裝(安裝方法),安裝完後再以上述兩種方法擇一加以檢查。 之後就可以撰寫加密程式如下:
6 o" R. J7 z( }1 x Y- @/ X* F
- //加密函數撰寫. Q+ q/ ^9 n8 m* s
- function encrypt($source,$toencrypt){
2 C* l+ l+ @+ B* c# U - //加密用的key % l! }" P J- g- d: R0 w
- $key = $source; M; m3 d0 l* q: b M
- //使用3DES方法加密
+ n; |$ F0 y c - $encryptMethod = MCRYPT_TRIPLEDES;
& h: W! U% b- l7 q' S - //初始化向量來增加安全性
" z0 s2 m& Q& Y2 C( M - $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND); ) Q6 o+ b5 W; a" C
- //使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式* a6 l0 T, |5 P( T- G3 J
- $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);
8 a+ N, e0 u* f* v7 U% D3 y# ~1 l e - //回傳解密後字串
o l0 U {9 r4 m# B; Q - return base64_encode($encrypted_toencrypt); . X1 y1 x; |5 M, o2 Z+ i' O8 L
- }
7 ]9 v7 I3 b' p; x' G - //解密函數撰寫
0 a6 B1 [( w/ i- P - function decrypt($source,$todecrypt) {
) [1 I- N8 d1 {6 {, p1 F! D - //解密用的key,必須跟加密用的key一樣
, V9 {7 T) a# T/ x# D - $key = $source;
# D; }+ t" s j: y! z4 D - //解密前先解開base64碼 ]1 d4 ?5 }& x/ N3 X$ A% O
- $todecrypt = base64_decode($todecrypt);1 H4 x' h7 r( a+ S! o
- //使用3DES方法解密
4 I% u" D. O3 }) F6 ]. y - $encryptMethod = MCRYPT_TRIPLEDES;
2 N) D9 ]1 `1 H) D1 m4 ], p; K - //初始化向量來增加安全性 4 @4 z% S% w. T# ^ B0 r$ m
- $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);
/ l$ X1 ^ g9 e - //使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式 5 \" p' k/ @0 B& v8 H
- $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);
$ W5 B. w8 ~: {- k* U! J - //回傳解密後字串
" k- R% Z- W; Q, @- }2 ^/ b - return $decrypted_todecrypt;
4 N x) E5 @# ? n1 m2 N( C, t1 O9 O - } ( I v! ?( I1 o7 ~
- //寫好加解密的函數之後,就可以來進行測試了$ F$ a2 f" M/ Y g
- //key設定5 T* r3 O3 ?$ r8 i5 j) `
- $source ="1234567890";+ k' y6 y4 |4 o3 ?
- //要加密的字串% C% O- l+ q7 P5 p+ b% `8 ]
- $string ="www.av4u.co";; X7 G% |- ?! C! D: {
- echo "string=".$string."<br>";5 r6 Z" }* r! _5 _6 C
- //進行加密並顯示加密後的字串
0 T: w, w5 ^1 `- R - $encode = encrypt($source,$string);# m3 f( s8 Q) f
- echo "encode=".$encode."<br>";& c2 I, E7 d- M J
- //進行解密並顯示解密後的字串( P" `, W: ?, r( i. j
- $decode = decrypt($source,$encode);
0 w0 l3 k: u# L D& b% G' n - echo "decode=".$decode."<br>";
複製代碼' c0 B1 @8 q. N
結果如下:
. e R, y* ]/ r5 B" w6 {- u) L
" }3 x! V& Y8 C+ h9 x 注意:
如果加解密過程沒有使用base64碼的話:會造成跨網域的資料傳輸時,接收端無法解讀(是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的),結果如下:
8 }8 F7 P# } f! [+ w
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) |
Powered by Discuz! X3.2 |