c# php des

来源:互联网 发布:软件界面欣赏 编辑:程序博客网 时间:2024/05/17 22:46

c#:

    public class DES    {        //加解密密钥        //private static string skey = "12345678";        //初始化向量        private static byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };        /// <summary>        /// DESEnCode DES加密        /// </summary>        /// <param name=”pToEncrypt”></param>        /// <param name=”sKey”></param>        /// <returns></returns>        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();        }               /// <summary>        /// DESDeCode DES解密        /// </summary>        /// <param name=”pToDecrypt”> 待解密的字符串</param>        /// <param name=”sKey”> 解密密钥,要求为8字节,和加密密钥相同</param>        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>               public static string DESDeCode(string pToDecrypt, string sKey)        {            //    HttpContext.Current.Response.Write(pToDecrypt + “<br>” + 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 System.Text.Encoding.Default.GetString(ms.ToArray());            //return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray()));        }    }

php:

<?php// s777n.netclass DES {var $key;var $iv; // 偏移量function DES($key, $iv = 0) {// key长度8例如:1234abcd$this->key = $key;if ($iv == 0) {$this->iv = $key;} 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 );}}/*$str = '123456789';$key = '1234abcd';$crypt = new DES ( $key );$mstr = $crypt->encrypt ( $str );$str = $crypt->decrypt ( $mstr );echo $str . ' <=> ' . $mstr;*/$str = '6BB3151AA457962A';$key = '1234abcd';$crypt = new DES ( $key );$str = $crypt->decrypt ( $str );echo $str ;?>