首页 > 代码库 > C#,PHP对应加密函数

C#,PHP对应加密函数

require_once "JunDes.php";$jDes=new JunDes();echo $jDes->encode(‘98765‘);//echo $jDes->key_64;//echo  $jDes->iv_64;
<?php/** * Created by PhpStorm. * User: yanjun * Date: 17/1/4 * Time: 10:43 */class JunDes {    private static $_instance = NULL;    public $key_64=‘5432‘;    public $iv_64=‘987654‘;    function toMd5($str)    {        return substr(strtoupper(md5($str)),0,8);    }    /**     * @return JoDES     */    public static function share() {        if (is_null(self::$_instance)) {            self::$_instance = new JoDES();        }        return self::$_instance;    }    /**     * 加密     * @param string $str 要处理的字符串     * @param string $key 加密Key,为8个字节长度     * @return string     */    public function encode($str) {        $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);        $str = $this->pkcs5Pad($str, $size);        $aaa = mcrypt_cbc(MCRYPT_DES, $this->toMd5($this->key_64), $str, MCRYPT_ENCRYPT, $this->toMd5($this->iv_64));        $ret = base64_encode($aaa);        return $ret;    }    /**     * 解密     * @param string $str 要处理的字符串     * @param string $key 解密Key,为8个字节长度     * @return string     */    public function decode($str, $key) {        $strBin = base64_decode($str);        $str = mcrypt_cbc(MCRYPT_DES, $this->toMd5($this->key_64), $strBin, MCRYPT_DECRYPT, $this->toMd5($this->iv_64));        $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);    }}

C#

public class MyDes    {        //加密/解密钥匙        static string  KEY_64 = ToMD5("4322");//注意了,是8个字符,64位            static string IV_64 = ToMD5("6543");//注意了,是8个字符,64位        #region MD5加密        /// <summary>        /// 转换MD5密码        /// </summary>        /// <param name="pass"></param>        /// <returns></returns>        public static string ToMD5(string KEY)        {            byte[] result = Encoding.Default.GetBytes(KEY);            MD5 md5 = new MD5CryptoServiceProvider();            byte[] output = md5.ComputeHash(result);            string KEY_64 = BitConverter.ToString(output).Replace("-", "").Substring(0, 8);            return KEY_64;        }        #endregion        /// <summary>        /// DES加密方法        /// </summary>        /// <param name="strPlain">明文</param>        /// <param name="strDESKey">密钥</param>        /// <param name="strDESIV">向量</param>        /// <returns>密文</returns>        public static string Encode(string source)        {            StringBuilder sb = new StringBuilder();            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())            {                byte[] key = ASCIIEncoding.ASCII.GetBytes(KEY_64);                byte[] iv = ASCIIEncoding.ASCII.GetBytes(IV_64);                byte[] dataByteArray = Encoding.UTF8.GetBytes(source);                des.Mode = System.Security.Cryptography.CipherMode.CBC;                des.Key = key;                des.IV = iv;                string encrypt = "";                using (MemoryStream ms = new MemoryStream())                using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))                {                    cs.Write(dataByteArray, 0, dataByteArray.Length);                    cs.FlushFinalBlock();                    encrypt = Convert.ToBase64String(ms.ToArray());                }                return encrypt;            }        }        /// <summary>        /// 进行DES解密。        /// </summary>        /// <param name="pToDecrypt">要解密的base64串</param>        /// <param name="sKey">密钥,且必须为8位。</param>        /// <returns>已解密的字符串。</returns>        public static string Decode(string source)        {            byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source);            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())            {                des.Key = ASCIIEncoding.ASCII.GetBytes(KEY_64);                des.IV = ASCIIEncoding.ASCII.GetBytes(IV_64);                System.IO.MemoryStream ms = new System.IO.MemoryStream();                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))                {                    cs.Write(inputByteArray, 0, inputByteArray.Length);                    cs.FlushFinalBlock();                    cs.Close();                }                string str = Encoding.UTF8.GetString(ms.ToArray());                ms.Close();                return str;            }        }    }

方式2

/// <summary>    /// 加密/解密类    /// </summary>    public class EncAndDec    {        //加密/解密钥匙        const string KEY_64 = "543";//注意了,是8个字符,64位            const string IV_64 = "543";//注意了,是8个字符,64位        const string ClientLocal_KEY_64 = "7654";        const string ClientLocal_IV_64 = "321232";        /// <summary>        /// 加密的方法,通过2个密匙进行加密        /// </summary>        /// <param name="data">加密的数据</param>        /// <returns>返回加密后的字符串</returns>        public static string Encode(string data)        {            EncAndDec ed = new EncAndDec();            return ed.Encode(data, KEY_64, IV_64);        }        /// <summary>        /// 解密的方法        /// </summary>        /// <param name="data">解密的数据</param>        /// <returns>返回加密前的字符串</returns>        public static string Decode(string data)        {            EncAndDec ed = new EncAndDec();            return ed.Decode(data, KEY_64, IV_64);        }        /// <summary>        /// 客户本地加密的方法,通过2个密匙进行加密        /// </summary>        /// <param name="data">加密的数据</param>        /// <returns>返回加密后的字符串</returns>        public static string EncodeClientLocal(string data)        {            EncAndDec ed = new EncAndDec();            return ed.Encode(data, ClientLocal_KEY_64, ClientLocal_IV_64);        }        /// <summary>        /// 客户本地解密的方法        /// </summary>        /// <param name="data">解密的数据</param>        /// <returns>返回加密前的字符串</returns>        public static string DecodeClientLocal(string data)        {            EncAndDec ed = new EncAndDec();            return ed.Decode(data, ClientLocal_KEY_64, ClientLocal_IV_64);        }        #region DEC加密的方法        /// <summary>        /// 加密的方法,通过2个密匙进行加密        /// </summary>        /// <param name="data">通过Md5加密一次</param>        /// <param name="KEY_64"></param>        /// <param name="IV_64"></param>        /// <returns></returns>        private string Encode(string data, string KEY_64, string IV_64)        {            KEY_64 = ToMD5(KEY_64);            IV_64 = ToMD5(IV_64);            byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);            byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();            //int i = cryptoProvider.KeySize;            MemoryStream ms = new MemoryStream();            CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);            StreamWriter sw = new StreamWriter(cst);            sw.Write(data);            sw.Flush();            cst.FlushFinalBlock();            sw.Flush();            return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);        }        /// <summary>        /// 解密的方法()        /// </summary>        /// <param name="data"></param>        /// <param name="KEY_64"></param>        /// <param name="IV_64"></param>        /// <returns></returns>        private string Decode(string data, string KEY_64, string IV_64)        {            KEY_64 = ToMD5(KEY_64);            IV_64 = ToMD5(IV_64);            byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);            byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);            byte[] byEnc;            try            {                byEnc = Convert.FromBase64String(data);            }            catch            {                return null;            }            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();            MemoryStream ms = new MemoryStream(byEnc);            CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);            StreamReader sr = new StreamReader(cst);            return sr.ReadToEnd();        }        #endregion        #region MD5加密        /// <summary>        /// 转换MD5密码        /// </summary>        /// <param name="pass"></param>        /// <returns></returns>        public static string ToMD5(string KEY)        {            byte[] result = Encoding.Default.GetBytes(KEY);            MD5 md5 = new MD5CryptoServiceProvider();            byte[] output = md5.ComputeHash(result);            string KEY_64 = BitConverter.ToString(output).Replace("-", "").Substring(0, 8);            return KEY_64;        }        #endregion    }

 

C#,PHP对应加密函数