文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
10.1.1 3DES 加密
DES(Data Encrypt Standard)又称 Triple DES,是 DES 加密算法的一种模式,它使用 3 条 56 位的密钥对数据进行三次加密。DES 加密算法是美国的一种由来已久的加密标准,这种算法通常用于加密需要传输的数据。
PHP 中需要在 php.ini 中打开 php_mcrypt.dll 以及 php_mcrypt_filter.dll 两个 lib 库的引用,即去掉以下代码前面的分号:
; extension=php_mcrypt.dll ; extension=php_mcrypt_filter.dll
PHP 的 3DES 已经有很简洁成熟的加密,我们来看一个简单的 3DES 加解密类,代码如下:
<?php class Crypt3Des { public $key = "xxxx" ; // 加密密钥 function Crypt3Des ( $key ) { $this->key=$key ; } // 加密函数 function encrypt ( $input ) { $size = mcrypt_get_block_size ( MCRYPT_3DES , 'ecb' ); $input = $this->pkcs5_pad ( $input , $size ); $key = str_pad ( $this->key , 24 , '0' ); $td = mcrypt_module_open ( MCRYPT_3DES , '' , 'ecb' , '' ); $iv = @mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND ); @mcrypt_generic_init ( $td , $key , $iv ); $data = mcrypt_generic ( $td , $input ); mcrypt_generic_deinit ( $td ); mcrypt_module_close ( $td ); $data = base64_encode ( $data ); return $data ; } // 解密函数 function decrypt ( $encrypted ) { $encrypted = base64_decode ( $encrypted ); $key = str_pad ( $this->key , 24 , '0' ); $td = mcrypt_module_open ( MCRYPT_3DES , '' , 'ecb' , '' ); $iv = @mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND ); $ks = mcrypt_enc_get_key_size ( $td ); @mcrypt_generic_init ( $td , $key , $iv ); $decrypted = mdecrypt_generic ( $td , $encrypted ); mcrypt_generic_deinit ( $td ); mcrypt_module_close ( $td ); $y=$this->pkcs5_unpad ( $decrypted ); return $y ; } function pkcs5_pad ( $text , $blocksize ) { $pad = $blocksize - ( strlen ( $text ) % $blocksize ); return $text . str_repeat ( chr ( $pad ), $pad ); } function pkcs5_unpad ( $text ) { $pad = ord ( $text{strlen ( $text ) -1} ); if ( $pad > strlen ( $text )) { return false ; } if ( strspn ( $text , chr ( $pad ), strlen ( $text ) - $pad ) ! = $pad ) { return false ; } return substr ( $text , 0 , -1 * $pad ); } function PaddingPKCS7 ( $data ) { $block_size = mcrypt_get_block_size ( MCRYPT_3DES , MCRYPT_MODE_CBC ); $padding_char = $block_size - ( strlen ( $data ) % $block_size ); $data .= str_repeat ( chr ( $padding_char ), $padding_char ); return $data ; } }?>
使用方法很简单,只要实例化这个类,直接调用相应函数即可,如下所示:
$rep=new Crypt3Des ( ' 加密 key' ); $input="hello 3des" ; echo " 原文: ".$input."<br/>" ; $encrypt_card=$rep->encrypt ( $input ); echo " 加密: ".$encrypt_card."<br/>" ; echo " 解密: ".$rep->decrypt ( $rep->encrypt ( $input ));
我们来看看经过它处理后的数据,如图 10-2 所示。
图 10-2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论