返回介绍

10.1.1 3DES 加密

发布于 2024-10-11 22:07:47 字数 2827 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文