最近需要在做的东西,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进制 }
网上无数照抄照搬的人,根本没有亲身验证过,希望大家以后能够秉承着严谨的方式。
相关推荐
PHP版本的Des3加密算法。支持密钥长度到24位。 支持Linux64位平台(加密结果与Windows32位结果一致)。 与发布的Delphi版Des3加密算法通用。
做的时候发现VB.net带的DES加密算法和我PHP里的不一样,PHP已经是成型产品,不能修改,于是就把PHP里的加密算法翻译了一遍。一天一夜,真不容易。主要问题出在PHP里在做位运算的时候截断数据,搞的我VB.net里费了好...
在IT行业中,数据安全是至关...在提供的压缩包文件`3des.php`中,很可能包含了上述PHP实现的DEs加密和解密函数的详细代码,供开发者参考和使用。通过这样的跨平台加密,可以确保数据在PHP和Java环境中传输时的安全性。
通过分析Java代码示例和理论讲解,我们深入了解了DES加密算法的工作原理及其在Java中的具体实现。同时,我们也简要探讨了如何在PHP中实现同样的功能,以及如何确保Java和PHP之间加密解密的互操作性。虽然DES因其密钥...
这个"php des加密类"可能是一个自定义的PHP类,用于实现DES加密和解密功能。以下是对这个主题的详细说明: 1. **DES算法原理**: DES是一种分组密码,它将明文数据分成64位的数据块进行处理,其中包含72个有效位,...
Delphi算法已经忘记出处,不过跟下面几个算法是配套的 VB.net算法来自 ... PHP的算法来自这个网站: http://www.tero.co.uk/des/code.php 修改的时候偷了个懒,2个...Delphi的同学可以找找这个加密算法也有Delphi版的。
Triple Data Encryption Algorithm)块密码的通称,它相当于是对每个数据块应用三次DES加密算法,由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解,3DES即是设计用来提供一种相对简单的方法,...
8. **DES.pas**:Delphi的单元文件,包含DES加密算法的Delphi实现。 9. **说明.txt**:这个文件提供了关于如何使用这些模块的详细说明和指导,是理解和使用该模块的关键。 10. **CryptDemo.pas**:另一个Delphi的源...
2. **加密算法实现**:PHP提供了多种加密库,如MCrypt(已废弃)和OpenSSL,可以实现AES、DES等加密算法。例如,使用OpenSSL进行AES加密可能涉及`openssl_encrypt()`和`openssl_decrypt()`函数。 3. **盐值(Salt)...
本篇文章将详细讲解如何在Java、C#和PHP这三个不同的编程语言环境中实现DES加密,并确保它们之间的互通性。在实际项目中,这种跨平台的加密互通能力对于多语言系统的集成至关重要。 首先,DES是一种块加密算法,它...
Triple Data Encryption Algorithm)块密码的通称,它相当于是对每个数据块应用三次DES加密算法,由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解,3DES即是设计用来提供一种相对简单的方法,...
des算法是从网上找的,里面有作者名称。 这里只说明PHP用法,ASP等其他用法雷同,不再复述。 $str="加密前字符串"; $mi=new COM("encryp.act"); $co=$mi->encode($str); echo($co);//输出加密后的字符串。 $co=$mi-...
DES(Data Encryption Standard)是一种古老的对称加密算法,虽然现在已被更强大的AES(Advanced Encryption Standard)所取代,但它在某些场景下仍然有其应用价值,特别是在兼容性或性能要求较低的场合。...
主要介绍了如何通过PHP实现Des加密算法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
a)采用标准的CBC模式的DES加密算法; b)密钥长度为56位,唯一密钥; c)数据采用初始向量(VI)做互斥运算,VI唯一初始向量; d)所有协议数据的明文需要在尾部加上原始数据长度,再加上“ABCD”4个字母,然后...
`DES`(Data Encryption Standard)是一种广泛使用的对称加密算法,它允许这三种平台之间进行加密解密操作,确保数据的机密性。本篇将详细讲解如何在`Android`、`iOS`和`PHP`中实现`DES`加密解密,并探讨其在中文和...
在这个主题中,我们将深入探讨Java和PHP如何实现DES加密解密。 在Java中,DES加密解密主要通过`javax.crypto`包中的类来实现。首先,我们需要一个密钥,通常是8字节的字节数组。然后,使用`KeyGenerator`生成一个...
分享一个php对称加密算法DES和AES类,支持密钥:64/128/256 bit(字节长度8/16/32),支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit),支持模式:CBC/ECB/OFB/CFB,密文编码:base64字符...
在本文中,我们将深入探讨PHP中的DES加密算法,并结合Yii框架的实现进行分析。DES(Data Encryption Standard)是一种块加密算法,它使用64位的数据块和56位的密钥进行加密。虽然DES现在被认为安全性较低,但在某些...
在PHP中实现DES加密解密功能,可以确保在Web应用中的数据传输安全,防止数据被非法获取或篡改。 首先,我们来了解DES算法的基本原理。DES是一种分组密码,将明文分为64位的数据块进行处理,其中第8位是奇偶校验位,...