gpt4 book ai didi

php DES加密算法实例分析

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章php DES加密算法实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了php DES加密算法。分享给大家供大家参考,具体如下:

yii框架的DES代码 。

?
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
<?php
/**
  *@see Yii CSecurityManager;
  */
class Des{
  public static function encrypt( $data , $key ){
    $module =mcrypt_module_open( 'des' , '' , MCRYPT_MODE_CBC, '' );
    $key = substr (md5( $key ),0,mcrypt_enc_get_key_size( $module ));
    srand();
    $iv =mcrypt_create_iv(mcrypt_enc_get_iv_size( $module ), MCRYPT_RAND);
    mcrypt_generic_init( $module , $key , $iv );
    $encrypted = $iv .mcrypt_generic( $module , $data );
    mcrypt_generic_deinit( $module );
    mcrypt_module_close( $module );
    return md5( $data ). '_' . base64_encode ( $encrypted );
  }
  public static function decrypt( $data , $key ){ 
    $_data = explode ( '_' , $data ,2);
    if ( count ( $_data )<2){
     return false;
    }
    $data = base64_decode ( $_data [1]);  
    $module =mcrypt_module_open( 'des' , '' , MCRYPT_MODE_CBC, '' );
    $key = substr (md5( $key ),0,mcrypt_enc_get_key_size( $module ));
    $ivSize =mcrypt_enc_get_iv_size( $module );
    $iv = substr ( $data ,0, $ivSize );
    mcrypt_generic_init( $module , $key , $iv );
    $decrypted =mdecrypt_generic( $module , substr ( $data , $ivSize , strlen ( $data )));
    mcrypt_generic_deinit( $module );
    mcrypt_module_close( $module );
    $decrypted = rtrim( $decrypted , "\0" );   
    if ( $_data [0]!=md5( $decrypted )){
     return false;
    }
    return $decrypted ;
  }
}

在网上看到了一篇文章,讲到:

由于PHP使用mcrypt扩展进行3DES加密,填充模式是跟JAVA以及.NET是不一样的,JAVA和.NET填充模式使用的是PKCS7.

所以PHP端必须自定义一个函数对加密字符串进行PKCS7模式补位填充.

另外一点就是双方的KEY注意进行base64编码,最后PHP端经过3DES加密后得到的结果也需要进行base64编码.

以上几点都做好之后,加密结果就一致了.

下面是兼容C#和java的3DES加密的算法 。

?
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
70
71
72
73
74
<?php
class STD3Des
{
   private $key = "" ;
   private $iv = "" ;
   /**
   * 构造,传递二个已经进行base64_encode的KEY与IV
   *
   * @param string $key
   * @param string $iv
   */
   function __construct ( $key , $iv )
   {
     if ( empty ( $key ) || empty ( $iv )) {
       echo 'key and iv is not valid' ;
       exit ();
     }
     $this ->key = $key ;
     $this ->iv = $iv ;
   }
   /**
   *加密
   * @param <type> $value
   * @return <type>
   */
   public function encrypt ( $value )
   {
     $td = mcrypt_module_open(MCRYPT_3DES, '' , MCRYPT_MODE_CBC, '' );
     $iv = base64_decode ( $this ->iv);
     $value = $this ->PaddingPKCS7( $value );
     $key = base64_decode ( $this ->key);
     mcrypt_generic_init( $td , $key , $iv );
     $ret = base64_encode (mcrypt_generic( $td , $value ));
     mcrypt_generic_deinit( $td );
     mcrypt_module_close( $td );
     return $ret ;
   }
   /**
   *解密
   * @param <type> $value
   * @return <type>
   */
   public function decrypt ( $value )
   {
     $td = mcrypt_module_open(MCRYPT_3DES, '' , MCRYPT_MODE_CBC, '' );
     $iv = base64_decode ( $this ->iv);
     $key = base64_decode ( $this ->key);
     mcrypt_generic_init( $td , $key , $iv );
     $ret = trim(mdecrypt_generic( $td , base64_decode ( $value )));
     $ret = $this ->UnPaddingPKCS7( $ret );
     mcrypt_generic_deinit( $td );
     mcrypt_module_close( $td );
     return $ret ;
   }
   private function PaddingPKCS7 ( $data )
   {
     $block_size = mcrypt_get_block_size( 'tripledes' , 'cbc' );
     $padding_char = $block_size - ( strlen ( $data ) % $block_size );
     $data .= str_repeat ( chr ( $padding_char ), $padding_char );
     return $data ;
   }
   private function UnPaddingPKCS7( $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 );
   }
}
?>

希望本文所述对大家PHP程序设计有所帮助.

原文链接:https://blog.csdn.net/koastal/article/details/51577321 。

最后此篇关于php DES加密算法实例分析的文章就讲到这里了,如果你想了解更多关于php DES加密算法实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com