字符串长度不能为零。参数名称:oldValue

时间:2013-05-24 11:23:00

标签: c# asp.net encryption

我正在使用Decrypt密码,我坚持这个错误:

  

字符串的长度不能为零。参数名称:oldValue

请帮助解决此错误或建议我另一个解密程序。

以下是完整代码:

string decryptpwd = string.Empty;
UTF8Encoding encodepwd = new UTF8Encoding();
Decoder Decode = encodepwd.GetDecoder();
byte[] todecode_byte = Convert.FromBase64String(encryptpwd.Replace("+",""));
int charcount = Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
char[] decode_char = new char[charcount];
Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decode_char, 0);
decryptpwd = new String(decode_char);
return decryptpwd;

4 个答案:

答案 0 :(得分:7)

您要求Replace方法使用加号字符(第二个参数)更改空字符串(第一个参数)。这没有任何意义,Replace正在抱怨这一点 我想你想做相反的事情

 byte[] todecode_byte = Convert.FromBase64String(encryptpwd.Replace("+",""));

此处的一部分我不确定当您将某些内容更改为输入字符串并将FromBase64String应用于结果时的结果。嗯,这实际上取决于字符串中最初的内容,但可以肯定(如果encryptpwd实际上是Base64字符串),则没有可替换的空格。

请记住,您无法将普通字符串传递给Convert.FromBase64String,您需要一个基本为64字符串的字符串

What is a base 64 string

例如

string pwd = "786";   // The original string

UnicodeEncoding u = new UnicodeEncoding();
byte[] x = u.GetBytes(pwd);  // The Unicode bytes of the string above

// Convert bytes to a base64 string
string b64 = Convert.ToBase64String(x);
Console.WriteLine(b64);

// Go back to the plain text string    
byte[] b = Convert.FromBase64String(b64);
string result = u.GetString(b);
Console.WriteLine(result);

最后一句话。有人(@Slacks)已经告诉你base64字符串不是加密技术,你不应该将它用于加密密码(它们根本不加密)

答案 1 :(得分:6)

encryptpwd.Replace("","+")

你究竟要取代什么?您尚未指定要替换的原始值。

String.Replace需要两个字符串参数oldValuenewValue。您指定了newValue +但是空字符串对oldValue不合法。

因此,如果您想用+替换空格,请尝试:

encryptpwd.Replace(" ","+");

反之亦然:

encryptpwd.Replace("+"," ");

http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx

答案 2 :(得分:2)

问题在这里

encryptpwd.Replace("","+")

应该有一些字符或字符串来替换

encryptpwd.Replace(" ","+")

答案 3 :(得分:-3)

错误 字符串长度不能为零。参数名称:oldValue

如果您想从字符串中分离单个字符。

试试这个:-

   int l=0;
   string str = Console.ReadLine();
   while(l <= str.Length -1)
   {
       Console.Write("{0} ", str[l]);
       l++;
   }