php实现和c#一致的DES加密解密实例
PHP实现和c#一致的DES加密解密,可以从网上搜到一大堆,但是测试后发现都没法用。以下正确代码是我经过苦苦才找到的。希望大家在系统整合时能用的上。
注意:key的长度为8位以内。
//C#版DES加解密算法 usingSystem; usingSystem.Data; usingSystem.Configuration; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.WebControls.WebParts; usingSystem.Web.UI.HtmlControls; usingSystem.Data.SqlClient; usingSystem.Security.Cryptography; usingSystem.IO; usingSystem.Text; publicclassDes{ //加解密密钥 privatestaticstringskey="12345678"; //初始化向量 privatestaticbyte[]DESIV={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF}; #regionDESEnCodeDES加密 publicstaticstringDESEnCode(stringpToEncrypt,stringsKey) { pToEncrypt=HttpContext.Current.Server.UrlEncode(pToEncrypt); DESCryptoServiceProviderdes=newDESCryptoServiceProvider(); byte[]inputByteArray=Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt); //建立加密对象的密钥和偏移量 //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 //使得输入密码必须输入英文文本 des.Key=ASCIIEncoding.ASCII.GetBytes(sKey); des.IV=ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStreamms=newMemoryStream(); CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write); cs.Write(inputByteArray,0,inputByteArray.Length); cs.FlushFinalBlock(); StringBuilderret=newStringBuilder(); foreach(bytebinms.ToArray()) { ret.AppendFormat("{0:X2}",b); } ret.ToString(); returnret.ToString(); } #endregion ////// /// ///待解密的字符串 /// 解密密钥,要求为8字节,和加密密钥相同 /// 解密成功返回解密后的字符串,失败返源串 #regionDESDeCodeDES解密 publicstaticstringDESDeCode(stringpToDecrypt,stringsKey) { //HttpContext.Current.Response.Write(pToDecrypt+"
"+sKey); //HttpContext.Current.Response.End(); DESCryptoServiceProviderdes=newDESCryptoServiceProvider(); byte[]inputByteArray=newbyte[pToDecrypt.Length/2]; for(intx=0;x key=$key; if($iv==0){ $this->iv=$key;//默认以$key作为iv }else{ $this->iv=$iv;//mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC),MCRYPT_DEV_RANDOM); } } functionencrypt($str){ //加密,返回大写十六进制字符串 $size=mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); $str=$this->pkcs5Pad($str,$size); returnstrtoupper(bin2hex(mcrypt_cbc(MCRYPT_DES,$this->key,$str,MCRYPT_ENCRYPT,$this->iv))); } functiondecrypt($str){ //解密 $strBin=$this->hex2bin(strtolower($str)); $str=mcrypt_cbc(MCRYPT_DES,$this->key,$strBin,MCRYPT_DECRYPT,$this->iv); $str=$this->pkcs5Unpad($str); return$str; } functionhex2bin($hexData){ $binData=""; for($i=0;$istrlen($text)) returnfalse; if(strspn($text,chr($pad),strlen($text)-$pad)!=$pad) returnfalse; returnsubstr($text,0,-1*$pad); } } ?> 以上这篇php实现和c#一致的DES加密解密实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。