2013-05-24 11 views
7

pracuję nad Deszyfruj Hasło i naklejane na ten błąd:Łańcuch nie może mieć zerowej długości. Nazwa parametru: oldValue

String cannot be of zero length. Parameter name: oldValue

życzliwej pomocy na ten błąd lub zaproponować mi inny program do deszyfrowania.

Oto pełny kod:

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 nie jest szyfrowane **. Musisz ** hash ** hasła. – SLaks

+0

Jakiej części błędu nie rozumiesz? Twój kod nie ma sensu. – SLaks

+0

@FreeLancer tutaj jest mój kompletny kod i używam tego kodu ze strony internetowej string decryptpwd = string.Pusty; UTF8Encoding encodepwd = new UTF8Encoding(); Decoder Decode = encodepwd.GetDecoder(); bajt [] 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; – Raheel

Odpowiedz

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

Co dokładnie pan wymianie? Nie określono oryginalnej wartości do zastąpienia.

String.Replace przyjmuje dwa argumenty łańcuchowe: oldValue i newValue. Podano nową wartość +, jednak pusty ciąg nie jest zgodny z prawem dla oldValue.

Dlatego jeśli chcesz zastąpić spację z + Spróbuj:

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

lub odwrotnie:

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

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

+0

próbuję również swoje rozwiązanie i dostać ten błąd nieprawidłowej długości do 64 Base-char tablicy – Raheel

2

problemem jest tutaj

encryptpwd.Replace("","+") 

Powinny mieć jakiś znak lub ciąg znaków, aby zastąpić

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

@Rajev próbuję swoje rozwiązanie po to ja dostać ten błąd nieprawidłowa długość dla 64 Base-char tablicy – Raheel

5

Pytasz metody replace zmienić pusty ciąg (pierwszy parametr) ze znakiem plus (drugi parametr). To nie ma sensu, a Replace narzeka na to.
myślę chcesz zrobić odwrotnej

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

część z tego nie jestem pewien, co wynik będzie, jeśli coś zmienić w ciągu wejściowego i zastosować FromBase64String do wyniku. Cóż, to naprawdę zależy od tego, co pierwotnie było w łańcuchu, ale na pewno (jeśli encryptpwd jest w rzeczywistości łańcuchem Base64), nie ma żadnych spacji do zastąpienia.

pamiętać, że nie można przejść normalną ciąg Convert.FromBase64String, potrzebny jest ciąg znaków, który jest ciągiem bazowej 64

What is a base 64 string

Na przykład

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

ostatnie słowo. Ktoś (@Slacks) już ci mówi, że ciąg base64 nie jest technologią szyfrowania i nie powinieneś używać go do szyfrowania haseł (w ogóle nie są szyfrowane)

+0

próbuję to dać błąd Niepoprawna długość dla tablicy znaków Base-64 – Raheel

+0

Właściwie po wprowadzeniu hasła 786 pojawia się błąd Nieprawidłowa długość dla tablicy znaków Base-64 po dodaniu ("+", ""), to daje błąd " Łańcuch nie może mieć zerowej długości Nazwa parametru: oldValue " – Raheel

+0

Skąd otrzymujesz ciąg 786? Nie możesz wziąć dowolnego ciągu i przekazać go do FromBse64String. Potrzebujesz Base64String. Coś, co wyjdzie z Convert.ToBase64String(). Dodam przykład: – Steve

Powiązane problemy