zoukankan      html  css  js  c++  java
  • 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
    
        }
  • 相关阅读:
    ArrayList.sort & Collections.sort
    preliminary->advanced exam coding part
    Spring JDBC的使用
    Spring之面向切面编程(AOP)
    Spring静态代理与动态代理
    Spring之JDBC的连接与注解的使用
    Spring入门之Bean的实例化方式
    Mybatis入门(二)
    Mybatis入门(一)
    正则表达式——转载
  • 原文地址:https://www.cnblogs.com/DoNetCShap/p/6248047.html
Copyright © 2011-2022 走看看