Poblema con la classe Rijndael

martedì 25 novembre 2003 - 17.56

Muten Profilo | Junior Member

utilizzando il codice presente nell'articolo "La crittografia e la classe Rijndael " ho fatto la mia classe cripta.
Ora utilizzando il metodo Decode mi viene generata un eccezione :
"Lunghezza non valida per una matrice di caratteri Base 64"

se la parola decodificata prima era :"aleszimonti@libero.it"

invece aleszimonti@virgilio.it funziona senza problemi

Brainkiller Profilo | Guru

Ciaoo,
io ti consiglio di rileggere bene l'articolo, e di riguardare il codice forse ti sei dimenticato qualcosa, io ho provato a codificare e decodificare i tuoi due indirizzi di posta elettronica e vanno senza problemi, quetso è il codice che ho usato:

string s1=Encode("aleszimonti@libero.it");
Console.WriteLine(s1);
string s2=Decode(s1);
Console.WriteLine(s2);

s1=Encode("aleszimonti@virgilio.it");
Console.WriteLine(s1);
s2=Decode(s1);
Console.WriteLine(s2);

L'output è il seguente:

aXzSFD4Nk0/bWiPaT3ykFAQk2teHOj+zGQ4k6ykYDsw=
aleszimonti@libero.it

vOJ9fCIX2Rct2xFfrGXFinDVVnxfxstfkKO6IZizjUA=
aleszimonti@virgilio.it

Ciao
David

Muten Profilo | Junior Member

grazie per la risposta, ho provato ed infatti il mio risultato per la mail
aleszimonti@libero.it :
aXzSFD4Nk0/bWiPaT3ykFAQk2teHOj zGQ4k6ykYDsw=
e non
aXzSFD4Nk0/bWiPaT3ykFAQk2teHOj+zGQ4k6ykYDsw=

riporto il codice che ho scritto, (ho dovuto tradurolo in vb)
Public Function Crypta(ByVal strDaCryptare As String) As String
Dim rjm As New RijndaelManaged
rjm.KeySize = 128
rjm.BlockSize = 128
rjm.Key = ASCIIEncoding.ASCII.GetBytes(chiave)
rjm.IV = ASCIIEncoding.ASCII.GetBytes(iv)
Dim input As Byte() = Encoding.UTF8.GetBytes(strDaCryptare)
Dim output As Byte() = rjm.CreateEncryptor().TransformFinalBlock(input, 0, input.Length)
Return Convert.ToBase64String(output)
End Function

sicuramente ho sbagliato qualcosa, ma non riesco a capire cosa !!!


ps scusate la maleducazione, mi presento sono Giuseppe

Brainkiller Profilo | Guru

Ciao la tua funzione è perfetta.
Questo è l'output che ottengo:
aXzSFD4Nk0/bWiPaT3ykFAQk2teHOj+zGQ4k6ykYDsw=

identico alla versione C# logicamente. Quindi io andrei a cercare il problema altrove.
La procedura e il codice di codifica/decodifica sono perfetti.
ciao

david

Muten Profilo | Junior Member

ho trovato il problema, io uso il codice criptato per passare i parametri in una pagina ASP.NET
utilizzando i paramtri dell'url, quando faccio il Request.QueryString il + mi scompare...
per ora uso la session, ma mi piacerebbe sapere perchè il Request.QueryString non "digerisce" il +.

grazie ancora

Brainkiller Profilo | Guru

allora cambia tutto, prova ad usare questa funzione:

Dim criptata as string
criptata="3434j4h3j5j3+wdsfW="

Dim alfa as String
alfa=HttpUtility.UrlEncode(criptata)

Dentro le parentesi passi la stringa criptata, e in uscita nella variabile alfa hai la stessa stringa però i caratteri speciali sono convertiti in modo che non li perdi se li passi come parametro alla pagina, esempio lo spazio dovrebbe essere convertito in %20 allo stesso modo il + ecc.
Ciao

david

Muten Profilo | Junior Member

perfetto, grazie mille :-)

ps ho come l'impressione che scriverò abbastanza spesso su questo utilissimo forum
ps che leccaculo ;-)

Brainkiller Profilo | Guru

:)
LOL :)
ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5