本文实例讲述了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
相关文章
猜你喜欢
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-25 66
-
2025-06-04 19
-
2025-05-27 53
-
2025-05-29 79
-
2025-05-27 99
热门评论