PHP实现加强版加密解密类实例
内容摘要
本文实例讲述了PHP实现加强版加密解密类。分享给大家供大家参考。具体如下:
<?php
class Ender{
private $enkey;//加密解密用的密钥
private $rep_char='#';
//
<?php
class Ender{
private $enkey;//加密解密用的密钥
private $rep_char='#';
//
文章正文
本文实例讲述了PHP实现加强版加密解密类。分享给大家供大家参考。具体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | <?php class Ender{ private $enkey ; //加密解密用的密钥 private $rep_char = '#' ; //替换加密后的base64字符串中的=,因为=在有些场合是禁止使用的, //这里可以用一个允许的字符作为替换。 //构造参数是密钥 public function __construct( $key = '' ){ if (! $key ){ $this ->enkey= $key ; } } //设置密钥http://blog.ddian.cn public function set_key( $key ){ $this ->enkey= $key ; } private function keyED( $txt , $encrypt_key ) { $encrypt_key = md5( $encrypt_key ); $ctr =0; $tmp = "" ; for ( $i =0; $i < strlen ( $txt ); $i ++) { if ( $ctr == strlen ( $encrypt_key )) $ctr =0; $tmp .= substr ( $txt , $i ,1) ^ substr ( $encrypt_key , $ctr ,1); $ctr ++; } return $tmp ; } //加密字符串 public function encrypt( $txt , $key = '' ) { if (! $key ){ $key = $this ->enkey; } srand((double)microtime()*1000000); $encrypt_key = md5(rand(0,32000)); $ctr =0; $tmp = "" ; for ( $i =0; $i < strlen ( $txt ); $i ++) { if ( $ctr == strlen ( $encrypt_key )) $ctr =0; $tmp .= substr ( $encrypt_key , $ctr ,1) . ( substr ( $txt , $i ,1) ^ substr ( $encrypt_key , $ctr ,1)); $ctr ++; } $r = base64_encode ( $this ->keyED( $tmp , $key )); $r = str_replace ( '=' , $this ->rep_char, $r ); return $r ; } //解密字符串 public function decrypt( $txt , $key = '' ) { $txt = str_replace ( $this ->rep_char, '=' , $txt ); $txt = base64_decode ( $txt ); if (! $key ){ $key = $this ->enkey; } $txt = $this ->keyED( $txt , $key ); $tmp = "" ; for ( $i =0; $i < strlen ( $txt ); $i ++) { $md5 = substr ( $txt , $i ,1); $i ++; $tmp .= ( substr ( $txt , $i ,1) ^ $md5 ); } return $tmp ; } } |
希望本文所述对大家的php程序设计有所帮助。
代码注释