`
Jonathan樊
  • 浏览: 77067 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

PHP 3DES加密算法实现

阅读更多

最近需要在做的东西,php返回一个3des加密的url给.net,然后.net端解密。php的实现一直无法和.net端匹配起来,先记在这里,希望看到的大神指点。网上无数照抄照搬的人,根本没有亲身验证过,希望大家以后能够秉承着严谨的方式。

 

PHP加密扩展库Mcrypt对数据加密和解密之前,首先创建了一个初始化向量,简称为iv。由 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);可见创建初始化 向 量需要两个参数:size指定了iv的大小;source为iv的源,其中值MCRYPT_RAND为系统随机数。

函数mcrypt_get_iv_size($cipher,$modes)返回初始化向量大小,参数cipher和mode分别指算法和加 密模式。

 

function encrypt($input){//数据加密
 $key=md5("XXXXXXXXX",TRUE);
 $key=base64_encode($key);
 $size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_ECB);
 $input = $this->pkcs5_pad($input, $size);
 //$key = str_pad($this->key,24,'0');
 $key = str_pad($key,24,'0');
 $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
// $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);//初始化向量
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_3DES,MCRYPT_MODE_ECB), MCRYPT_RAND);
 @mcrypt_generic_init($td, $key, $iv);
 $data = mcrypt_generic($td, $input);
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 //    $data = base64_encode($this->PaddingPKCS7($data));
 $data = base64_encode($data);
 return  $data;
 }

 

 function pkcs5_pad ($text, $blocksize) {
 $pad = $blocksize - (strlen($text) % $blocksize);
 return $text . str_repeat(chr($pad), $pad);
 }

 .net侧的代码实现如下:

   var des = new TripleDESCryptoServiceProvider();
                var hashMd5 = new MD5CryptoServiceProvider();

                des.Key = hashMd5.ComputeHash(Encoding.Default.GetBytes(strKey));
                des.Mode = CipherMode.ECB;
                des.Padding = PaddingMode.Zeros;

                var desEncrypt = des.CreateEncryptor();
                var buffer = Encoding.Default.GetBytes(strString);
                return Convert.ToBase64String(desEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));

 

 

查到了php的另一种实现方式,皆不可。

function encrypt($string) {

              //加密用的密钥文件 

               $key=md5("XXXXXXXXXXXX",TRUE);
               $key=base64_encode($key);

              //加密方法 

              $cipher_alg = MCRYPT_TRIPLEDES;

              //初始化向量来增加安全性 

              $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND); 

               

              //开始加密 

              $encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv); 

              return base64_encode($encrypted_string);//转化成16进制

       }

 

 

网上无数照抄照搬的人,根本没有亲身验证过,希望大家以后能够秉承着严谨的方式。

0
0
分享到:
评论

相关推荐

    PHP Des3加密算法

    PHP版本的Des3加密算法。支持密钥长度到24位。 支持Linux64位平台(加密结果与Windows32位结果一致)。 与发布的Delphi版Des3加密算法通用。

    VB.net、PHP、DELPHI、Javascript、Perl通用的DES、DES3加密算法

    做的时候发现VB.net带的DES加密算法和我PHP里的不一样,PHP已经是成型产品,不能修改,于是就把PHP里的加密算法翻译了一遍。一天一夜,真不容易。主要问题出在PHP里在做位运算的时候截断数据,搞的我VB.net里费了好...

    php实现DES 加密 匹配java的des加密 验证

    在IT行业中,数据安全是至关...在提供的压缩包文件`3des.php`中,很可能包含了上述PHP实现的DEs加密和解密函数的详细代码,供开发者参考和使用。通过这样的跨平台加密,可以确保数据在PHP和Java环境中传输时的安全性。

    java和php通用的加密算法

    通过分析Java代码示例和理论讲解,我们深入了解了DES加密算法的工作原理及其在Java中的具体实现。同时,我们也简要探讨了如何在PHP中实现同样的功能,以及如何确保Java和PHP之间加密解密的互操作性。虽然DES因其密钥...

    php des加密类

    这个"php des加密类"可能是一个自定义的PHP类,用于实现DES加密和解密功能。以下是对这个主题的详细说明: 1. **DES算法原理**: DES是一种分组密码,它将明文数据分成64位的数据块进行处理,其中包含72个有效位,...

    真正的VB.net、PHP、DELPHI、Javascript、Perl通用的DES、DES3加密算法

    Delphi算法已经忘记出处,不过跟下面几个算法是配套的 VB.net算法来自 ... PHP的算法来自这个网站: http://www.tero.co.uk/des/code.php 修改的时候偷了个懒,2个...Delphi的同学可以找找这个加密算法也有Delphi版的。

    php-3des加密解密类

    Triple Data Encryption Algorithm)块密码的通称,它相当于是对每个数据块应用三次DES加密算法,由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解,3DES即是设计用来提供一种相对简单的方法,...

    JS及PHP和Delphi通用DES加密模块

    8. **DES.pas**:Delphi的单元文件,包含DES加密算法的Delphi实现。 9. **说明.txt**:这个文件提供了关于如何使用这些模块的详细说明和指导,是理解和使用该模块的关键。 10. **CryptDemo.pas**:另一个Delphi的源...

    PHP动态加密算法源程序

    2. **加密算法实现**:PHP提供了多种加密库,如MCrypt(已废弃)和OpenSSL,可以实现AES、DES等加密算法。例如,使用OpenSSL进行AES加密可能涉及`openssl_encrypt()`和`openssl_decrypt()`函数。 3. **盐值(Salt)...

    Java、C#与PHP的DES加密互通代码(测试通过)

    本篇文章将详细讲解如何在Java、C#和PHP这三个不同的编程语言环境中实现DES加密,并确保它们之间的互通性。在实际项目中,这种跨平台的加密互通能力对于多语言系统的集成至关重要。 首先,DES是一种块加密算法,它...

    php-3des加密解密类.zip

    Triple Data Encryption Algorithm)块密码的通称,它相当于是对每个数据块应用三次DES加密算法,由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解,3DES即是设计用来提供一种相对简单的方法,...

    VB6 DES 加密/解密算法 插件

    des算法是从网上找的,里面有作者名称。 这里只说明PHP用法,ASP等其他用法雷同,不再复述。 $str="加密前字符串"; $mi=new COM("encryp.act"); $co=$mi->encode($str); echo($co);//输出加密后的字符串。 $co=$mi-...

    Qt DES_ECB加密解密类

    DES(Data Encryption Standard)是一种古老的对称加密算法,虽然现在已被更强大的AES(Advanced Encryption Standard)所取代,但它在某些场景下仍然有其应用价值,特别是在兼容性或性能要求较低的场合。...

    如何通过PHP实现Des加密算法代码实例

    主要介绍了如何通过PHP实现Des加密算法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    php 基于标准的DES CBC模式的加密算法

    a)采用标准的CBC模式的DES加密算法; b)密钥长度为56位,唯一密钥; c)数据采用初始向量(VI)做互斥运算,VI唯一初始向量; d)所有协议数据的明文需要在尾部加上原始数据长度,再加上“ABCD”4个字母,然后...

    android iOS php des 互通加密解密算法

    `DES`(Data Encryption Standard)是一种广泛使用的对称加密算法,它允许这三种平台之间进行加密解密操作,确保数据的机密性。本篇将详细讲解如何在`Android`、`iOS`和`PHP`中实现`DES`加密解密,并探讨其在中文和...

    java php DES 加密解密

    在这个主题中,我们将深入探讨Java和PHP如何实现DES加密解密。 在Java中,DES加密解密主要通过`javax.crypto`包中的类来实现。首先,我们需要一个密钥,通常是8字节的字节数组。然后,使用`KeyGenerator`生成一个...

    php对称加密算法DES和AES类.zip

    分享一个php对称加密算法DES和AES类,支持密钥:64/128/256 bit(字节长度8/16/32),支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit),支持模式:CBC/ECB/OFB/CFB,密文编码:base64字符...

    php DES加密算法实例分析

    在本文中,我们将深入探讨PHP中的DES加密算法,并结合Yii框架的实现进行分析。DES(Data Encryption Standard)是一种块加密算法,它使用64位的数据块和56位的密钥进行加密。虽然DES现在被认为安全性较低,但在某些...

    flex-php-des加密解密包

    在PHP中实现DES加密解密功能,可以确保在Web应用中的数据传输安全,防止数据被非法获取或篡改。 首先,我们来了解DES算法的基本原理。DES是一种分组密码,将明文分为64位的数据块进行处理,其中第8位是奇偶校验位,...

Global site tag (gtag.js) - Google Analytics