我在做DES解密的时候,遇到了这个问题“未能找到任何可识别的数字”,请高手指教!
 /// <summary>
        /// 解密原函数
        /// </summary>
        /// <param name="pToDecrypt">解密字符串</param>
        /// <param name="sKey">解密密钥</param>
        /// <returns>字符串</returns>
        public static string DesDecrypt(string pToDecrypt, string sKey)
        {
            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());
        }
其中
 int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));    //这句报错
 inputByteArray[x] = (byte)i;  //这句报错数值转换方面的问题

解决方案 »

  1.   

    Substring(x * 2, 2),这是截取字符!   你x*2会大于2,肯定要报错了啊
      

  2.   

    这方法我也用,出现错误一般2种:1,传过来的数据为空;2,传过来的数据不是des加密过的,所以不好解密。
    你最好调试下看看传过来的数据
      

  3.   

    请问楼主有解决好这个问题吗?我也犯了这个错,是因为我传过来的pToDecrypt为xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1,我用了下
    byte n = Convert.ToByte("xx",16);
    来测试,结果报了相同的错误,请问是怎么回事?