首页 > 资讯列表 > 编程/数据库 >> PHP

php,c#版DES加密解密

PHP 2014-12-07 05:00:04 转载来源: 网络整理/侵权必删

本文是一个php实现和c#一致的DES加密解密实现代码,可以从网上搜到一大堆,但是测试后发现都没法用。以下正确代码是我经过苦苦才找到的

本文是一个php实现和c#一致的DES加密解密实现代码,可以从网上搜到一大堆,但是测试后发现都没法用。以下正确代码是我经过苦苦才找到的。希望大家在系统整合时能用的上。
注意:key的长度为8位以内。

C#版des加密解密算法


//C# 版DES 加解密算法  
using System;     
using System.Data;     
using System.Configuration;     
using System.Web;     
using System.Web.Security;     
using System.Web.UI;     
using System.Web.UI.WebControls;     
using System.Web.UI.WebControls.WebParts;     
using System.Web.UI.HtmlControls;     
using System.Data.SqlClient;     
using System.Security.Cryptography;     
using System.IO;     
using System.Text;     
public class Des{     
    //加解密密钥  
    private static  string skey = "12345678";  
    //初始化向量  
    private static byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };   
   
                #region DESEnCode DES加密     
                public static string DESEnCode(string pToEncrypt, string sKey)     
                {     
                    pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt);     
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();     
                    byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);     
                 
                    //建立加密对象的密钥和偏移量      
                    //原文使用ASCIIEncoding.ASCII方法的GetBytes方法      
                    //使得输入密码必须输入英文文本      
                    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);     
                    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);     
                    MemoryStream ms = new MemoryStream();     
                    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);     
                 
                    cs.Write(inputByteArray, 0, inputByteArray.Length);     
                    cs.FlushFinalBlock();     
                 
                    StringBuilder ret = new StringBuilder();     
                    foreach (byte b in ms.ToArray())     
                    {     
                        ret.AppendFormat("{0:X2}", b);     
                    }     
                    ret.ToString();     
                    return ret.ToString();     
                }    
                #endregion    
                ///   
                ///   
                ///   
                ///  待解密的字符串  
                ///  解密密钥,要求为8字节,和加密密钥相同  
                /// 解密成功返回解密后的字符串,失败返源串  
                #region DESDeCode DES解密  
                public static string DESDeCode(string pToDecrypt, string sKey)  
                {  
                    //    HttpContext.Current.Response.Write(pToDecrypt + "
" + sKey); // HttpContext.Current.Response.End(); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; for (int x = 0; x < pToDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray())); } #endregion }

php版des加密解密版

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 );  
        }  
    }  
      
    function encrypt($str) {  
    //加密,返回大写十六进制字符串  
        $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );  
        $str = $this->pkcs5Pad ( $str, $size );  
        return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );  
    }  
      
    function decrypt($str) {  
    //解密  
        $strBin = $this->hex2bin( strtolower( $str ) );  
        $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );  
        $str = $this->pkcs5Unpad( $str );  
        return $str;  
    }  
      
    function hex2bin($hexData) {  
        $binData = "";  
        for($i = 0; $i < strlen ( $hexData ); $i += 2) {  
            $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );  
        }  
        return $binData;  
    }  
  
    function pkcs5Pad($text, $blocksize) {  
        $pad = $blocksize - (strlen ( $text ) % $blocksize);  
        return $text . str_repeat ( chr ( $pad ), $pad );  
    }  
      
    function pkcs5Unpad($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 DES 加密解密


声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!

站长搜索

http://www.adminso.com

Copyright @ 2007~2024 All Rights Reserved.

Powered By 站长搜索

打开手机扫描上面的二维码打开手机版


使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

站长搜索目录系统技术支持