dachaochao1 2015-01-20 07:49 采纳率: 0%
浏览 1749

关于DES加密 求帮助!

对接方des加密 是用.net 写的

我用的是php 就大侠把.net的加密程序帮我 转换成 php的

下面是 .NET 的加密程序:

 public class DESEncryptDecrypt
    {
        private string Key;
        private string IV;
        private DESCryptoServiceProvider IDes;
        private byte[] GetKey;
        private byte[] GetIV;
        public DESEncryptDecrypt()
        {
            this.Key = "%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7&*^$^&*%&*%$@#@^";
            this.IV = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
            this.Init();
        }

        public DESEncryptDecrypt(string Key)
        {
            this.Key = Key;
            this.IV = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
            this.Init();
        }

        public DESEncryptDecrypt(string Key,string IV)
        {
            this.Key = Key;
            this.IV = IV;
            this.Init();
        }

        private void Init()
        {
            this.IDes = new DESCryptoServiceProvider();
            this.IDes.GenerateKey();
            this.GetKey = this.IDes.Key;
            this.IDes.GenerateIV();
            this.GetIV = this.IDes.IV;
        }

        /// <summary>
        /// 获得密钥
        /// </summary>
        /// <returns>密钥</returns>
        private byte[] GetLegalKey()
        {
            string sTemp = this.Key;

            byte[] bytTemp = this.GetKey;
            int KeyLength = bytTemp.Length;
            if (sTemp.Length > KeyLength)
            {
                sTemp = sTemp.Substring(0, KeyLength);
            }
            else
            {
                if (sTemp.Length < KeyLength)
                {
                    sTemp = sTemp.PadRight(KeyLength, ' ');
                }
            }
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }

        /// <summary>
        /// 获得初始向量IV
        /// </summary>
        /// <returns>初试向量IV</returns>
        private byte[] GetLegalIV()
        {
            string sTemp = this.Key;
            byte[] bytTemp = this.GetIV;
            int IVLength = bytTemp.Length;
            if (sTemp.Length > IVLength)
            {
                sTemp = sTemp.Substring(0, IVLength);
            }
            else
            {
                if (sTemp.Length < IVLength)
                {
                    sTemp = sTemp.PadRight(IVLength, ' ');
                }
            }
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }

        /// <summary>
        /// 加密算法
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public string Encrypt(string data)
        {

            //将要加密的数据编码为字节数组
            byte[] encrypt_data = System.Text.Encoding.UTF8.GetBytes(data);    //如果使用Unicode编码,支持中文加密
            //创建流,保存加密后的数据
            MemoryStream ms = new MemoryStream();
            //创建加密流
            CryptoStream cs = new CryptoStream(ms, this.IDes.CreateEncryptor(this.GetLegalKey(), this.GetLegalIV()), CryptoStreamMode.Write);
            //调用Write方法将加密后的结果写到 流 中
            cs.Write(encrypt_data, 0, encrypt_data.Length);
            //将数据从流写入内存(这句不能少,否则在从内存导出到字符串的时候会出现字符丢失)
            cs.FlushFinalBlock();
            //ms.ToString(); ==>将流写入字节数组中
            string result = Convert.ToBase64String(ms.ToArray());
            ms.Close();
            cs.Close();
            return result;
        }

        /// <summary>
        /// 解密算法
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public string Decrypt(string data)
        {

            byte[] decrypt_data = Convert.FromBase64String(data);

            MemoryStream ms = new MemoryStream();

            CryptoStream cs = new CryptoStream(ms, this.IDes.CreateDecryptor(this.GetLegalKey(), this.GetLegalIV()), CryptoStreamMode.Write);
            cs.Write(decrypt_data, 0, decrypt_data.Length);
            cs.FlushFinalBlock();
            string result = System.Text.Encoding.UTF8.GetString(ms.ToArray());
            ms.Close();
            cs.Close();

            return result;
        }
    }
  • 写回答

2条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛