La crittografia e la classe Rijndael

sabato 24 luglio 2004 - 10.00

Trinità Profilo | Junior Member

ho letto quest'articolo semrpe su dotnethell, e mi sono costruito una classe che mi fà codifica e decodifica, fantastico.

Il tutto funziona, solo che vorrei utilizzare questa classe per codificare, e successivamente decodificare, parametri che vengono passati via query string

mi servirebbero delle ottimizzazioni al codice che non sono riuscito ad apportare.

1) passa mi piacerebbe che la stringa criptata fosse più corta
2) devo impedire che nella stringa criptata ci siano caratteri "speciali" tipo "+", "=", "/" che mi incasinerebbero la querystring

come posso fare ?
questo sotto è la versione VB.net della funzione che cripta


Public Function ax_crypt(ByVal S 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(S)
Dim output As [Byte]() = rjm.CreateEncryptor().TransformFinalBlock(input, 0, input.Length)

Return Convert.ToBase64String(output)

End Function

Brainkiller Profilo | Guru

Ciao,
avere una stringa criptata più corta è un po' diffiicile.... l'algoritmo è quello e non si può fare molto.

Per passare invece contenuti via QueryString che contengano caratteri particolari come quelli che hai elencato prova a codificare la stringa che passi con questo metodo della classe HttpUtility:

HttpUtility.UrlEncode()

e vedrai che passandoli non avrai problemi perchè vengono codificati in modo corretto, tipo lo spazio viene trasformato in %20 e così via.

ciao
david

Trinità Profilo | Junior Member

Grazie intanto per la tua risposta. Sono riuscito intanto a fare quello che volevo più o meno.
Come algoritmo ho usato RC2 ed inoltre ho impostato le 2 chiavi a 8 caratteri ognuna e il keysize e il block size a 64, così mi pare che la stringa risultante sia più corta.
Infine dopo tanto provare, sono arrivato pure io a fare un urlencode e urldecode e sembra funzionare (inoltre converte anche i caratteri speciali....)

Unico piccolo problema è che io ho la mia classe che cripta e decripta in una dll separata (e voglio che sia così) MI piacerebbe che nella classe facesse lei stessa l'urlencode e decode, solo che non risco ad importare il namespace httputility. Appena arrivo a system.web non ho poi tutte le classi come se lo importassi da una pagina normale....

come posso fare ?

Brainkiller Profilo | Guru

Probabilmente nelle References, devi aggiungere gli assemblies che coprono il namespace in cui c'è HttpUtility. Dalla documentazione esce che il namespace è System.Web e l'assembly System.Web.Dll prova a referneziare quello.
Di solito in VB.NET e in base al tipo di progetto che crei vengono automaticamente refernziate degli Assemblies e importati dei namespaces.
Se invece crei una classe no, perchè potrebbe essere di qualunque tipo quindi tu devi specificare che cosa vuoi.

ciao
david

Trinità Profilo | Junior Member

AH ok, immaginavo una cosa del genere. Quando torno a casa provo.
Pensavo anche di crearmi una classe nel mio progetto web che mi facesse quest'operazione, invece nemmeno lì sono riuscito a trovare il namespace che mi interessa. Sembra sia raggiungibile solo dal code behind di una pagina aspx.

Ma poi provo come dici tu
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5