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 メソッドに、空の文字列 (最初のパラメーター) をプラス文字 (2 番目のパラメーター) に変更するように要求しています。これは意味がなく、Replace はこれについて不平を言っています。
逆にしたいんだと思う

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

これの一部は、入力文字列に何かを変更し、結果に FromBase64String を適用したときに結果がどうなるかわかりません。それは文字列の元の内容に大きく依存しますが、確かに (encryptpwd実際に Base64 文字列である場合) 置換するスペースはありません。

通常の文字列を Convert.FromBase64String に渡すことはできないことに注意してください。ベース 64 文字列である文字列が必要です。

ベース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は 2 つの文字列引数oldValueとを受け取りますnewValue。newValue を指定しました+が、空の文字列は には無効oldValueです。

したがって、空白を置き換えたい場合は、次を+試してください。

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 に答える