本帖最后由 wihelm 于 2014-06-25 11:04:12 编辑

解决方案 »

  1.   

    encryptkey在哪里定义,在哪里赋值的,代码贴出来
      

  2.   

    可以的,只要在最后进行新密钥=md5(密钥).substring(2,8);
      

  3.   

            SqlBaseClass G_SqlExecute = new SqlBaseClass();   //声明数据库操作类对象
            private string encryptkey = "Oyea";    //密钥  自己在byte[] key = System.Text.Encoding.Unicode.GetBytes(encryptkey);下设置断点,赋值给a,确实是Oyea
    代码有点多,贴不下,其实就是这个代码:http://download.csdn.net/detail/sequh/450840,里面的WinOperationClass.cs文件。
    WinOperationClass文件:
    http://pan.baidu.com/s/1kTHVEsB
      

  4.   


    谢回复,没看到这样的代码,是这里的文件:[url=http://substring][/url]
    WinOperationClass.cs里面的代码。
      

  5.   

    应该是
    ASCIIEncoding.ASCII.GetBytes(encryptkey); 

    System.Text.Encoding.Unicode.GetBytes(encryptkey);
    的区别
    ASCII英文好像是二位的
    Unicode都是四位的
      

  6.   

    那个必须8位的代码,果然把Encoding.GetEncoding("utf-8").GetBytes(p_strKey)改为Encoding.Unicode.GetBytes(p_strKey)就可以输入4为密钥了。不过算出来加密后是:96bd2b629ed5b86981c44d91fa5f8425。
    lr0rYp7VuGmBxE2R+l+EJQ==怎么来的?怎么还有“=”,“+”等,算不出lr0rYp7VuGmBxE2R+l+EJQ==啊。难道算法不一样?我看着一样的啊
    那个des字符串加密解密程序的代码:

     /// <summary>
        /// DES加密,加密utf-8字符集数据,为静态函数
        /// </summary>
        /// <param name="p_strEncypt">需要加密字符串</param>
        /// <param name="p_strKey">密钥,只能8位</param>
        /// <returns>加密后字符串</returns>
        public static string DESEncryptEncodUTF(string p_strEncypt, string p_strKey)
        {
            StringBuilder sb = new StringBuilder();
            string strData = string.Empty;//加密后返回的字符串
            p_strEncypt = System.Web.HttpUtility.UrlEncode(p_strEncypt, System.Text.Encoding.UTF8);        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] btMyStrs = Encoding.GetEncoding("utf-8").GetBytes(p_strEncypt);
            byte[] btMyKeys = Encoding.GetEncoding("utf-8").GetBytes(p_strKey);
            des.IV = btMyKeys;
            des.Key = btMyKeys;
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateEncryptor(), CryptoStreamMode.Write);
            cryptoStream.Write(btMyStrs, 0, btMyStrs.Length);
            cryptoStream.FlushFinalBlock();        foreach (byte bt in memoryStream.ToArray())
            {
                sb.AppendFormat("{0:X2}", bt);
            }        strData = sb.ToString().ToLower();
            return strData;
        }
      

  7.   

     将二进制转为64位字节 Convert.ToBase64String(ms.ToArray());