我正在使用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;
答案 0 :(得分:7)
您要求Replace方法使用加号字符(第二个参数)更改空字符串(第一个参数)。这没有任何意义,Replace正在抱怨这一点 我想你想做相反的事情
byte[] todecode_byte = Convert.FromBase64String(encryptpwd.Replace("+",""));
此处的一部分我不确定当您将某些内容更改为输入字符串并将FromBase64String应用于结果时的结果。嗯,这实际上取决于字符串中最初的内容,但可以肯定(如果encryptpwd
实际上是Base64字符串),则没有可替换的空格。
请记住,您无法将普通字符串传递给Convert.FromBase64String,您需要一个基本为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字符串不是加密技术,你不应该将它用于加密密码(它们根本不加密)
答案 1 :(得分:6)
encryptpwd.Replace("","+")
你究竟要取代什么?您尚未指定要替换的原始值。
String.Replace
需要两个字符串参数oldValue
和newValue
。您指定了newValue +
但是空字符串对oldValue
不合法。
因此,如果您想用+
替换空格,请尝试:
encryptpwd.Replace(" ","+");
反之亦然:
encryptpwd.Replace("+"," ");
答案 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++;
}