2013-05-24 146 views
7

私は、復号化パスワードに取り組んでいると私は、このエラーに引っかかっ:文字列の長さをゼロにすることはできません。パラメータ名:OLDVALUE

String cannot be of zero length. Parameter name: 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; 
+3

** Base64は暗号化されていません**。 **ハッシュ**のパスワードを入力する必要があります。 – SLaks

+0

エラーのどの部分を理解していませんか?あなたのコードは意味をなさない。 – SLaks

+0

@FreeLancerここに私の完全なコードです。私はこのコードをウェブサイトから使用します。 string decryptpwd = string。空の; UTF8Encoding encodepwd = new UTF8Encoding(); デコーダデコード= encodepwd.GetDecoder(); バイト[] todecode_byte = Convert.FromBase64String(encryptpwd.Replace( "+"、 "")); int charcount = Decode.GetCharCount(todecode_byte、0、todecode_byte.Length); char [] decode_char =新しいchar [charcount]; Decode.GetChars(todecode_byte、0、todecode_byte.Length、decode_char、0); decryptpwd =新しい文字列(decode_char); return decryptpwd; – Raheel

答えて

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

あなたが正確に何を交換する:ここでは

は完全なコードですか?あなたは元の値を指定していません。

String.Replaceは、2つの文字列引数oldValuenewValueをとります。 newValue +を指定しましたが、空の文字列はoldValueでは無効です。したがって

あなたは+試してみると空白を交換したい場合:

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

、またはその逆:

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

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

+0

また、私はそれが与えるこれを試して、それは私がそのエラーにベース64 char配列 – Raheel

2

問題はここに

encryptpwd.Replace("","+") 
です

あなたは、プラス記号(第2パラメータ)で、空の文字列(最初のパラメータ)を変更するために交換する方法を求めている

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

@Rajevため 無効な長さを取得あなたのソリューションを試してみてくださいエラー Base-64 char配列の長さが無効です – Raheel

5

を交換するためにいくつかの文字または文字列を持っている必要があります。これは意味をなさないし、置換はこれについて不平を言います。
は、私はあなたが逆

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); 

Aについては

What is a base 64 string

ある文字列を必要とします最終的な言葉。誰か(@ Slacks)は既にbase64文字列が暗号化技術ではないことを示しているので、のパスワードをに暗号化しないでください。

+0

ため 無効な長さを取得した後、私はあなたのソリューションをしようと、私はそのエラーにベース64 char配列 – Raheel

+0

実際にパスワードを入力すると、エラーが発生しますBase-64 char配列の長さが無効です( "+"、 "")文字列の長さをゼロにすることはできません。パラメータ名:oldValue " – Raheel

+0

文字列786はどこにありますか?任意の文字列を取得してFromBse64Stringに渡すことはできません。 Base64Stringが必要です。あなたがConvert.ToBase64String()から出ていくもの。私は例を追加します – Steve

関連する問題