9

我正在处理解密密码,但我遇到了这个错误:

字符串的长度不能为零。参数名称: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

4 回答 4

10

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

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

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

请记住,您不能将普通字符串传递给 Convert.FromBase64String,您需要一个 base 64 字符串

什么是 base 64 字符串

例如

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 字符串不是一种加密技术,你不应该用它来加密密码(它们根本没有加密)

于 2013-05-24T11:25:14.897 回答
7
encryptpwd.Replace("","+")

你到底要换什么?您尚未指定要替换的原始值。

String.Replace接受两个字符串参数oldValuenewValue. 您指定了 newValue+但是空字符串对于oldValue.

+因此,如果您想用try替换空格:

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

或相反亦然:

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

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

于 2013-05-24T11:24:31.447 回答
2

问题就在这里

encryptpwd.Replace("","+")

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

encryptpwd.Replace(" ","+")
于 2013-05-24T11:24:57.610 回答
-3

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

如果您想将单个字符与字符串分开。

尝试这个:-

   int l=0;
   string str = Console.ReadLine();
   while(l <= str.Length -1)
   {
       Console.Write("{0} ", str[l]);
       l++;
   }
于 2021-05-25T17:29:48.407 回答