Problema con algoritmi di crittografia

sabato 31 luglio 2010 - 08.44
Tag Elenco Tags  C#

Cuky Profilo | Newbie

ciao, espongo il mio problema.

Mi sono state date delle specifiche per trasformare una stringa di input:
LA FUNZIONE DI HASH UTILIZZATA E' L'ALGORITMO STANDARD SHA-1 (DETTO ANCHE SHA) E PER ESSERE TRASMESSO IN HTTP DEVE ESSERE CODIFICATO OPPORTUNAMENTE.
A TALE SCOPO SI DEVE UTILIZZARE UNA CONVERSIONE IN ESADECIMALE.

Inoltre mi è stato dato un esempio corretto per cui dalla stringa di Input ottengo:
NjhGNThFQzA3QTVFMTVCNUJFNUU0RDIzRTVFQ==

La funzione che mi sembrerebbe ovvia da tali specifiche sarebbe: ConvertInHex(SHA1(input))
Così facendo ottengo dall'input iniziale:
68F58EC07A5E15B5BE5E4D23E5EBC60B7E73F290

Ho provato quindi (per tentativi) a codificare la stringa ottenuta in BASE64 ottenendo:
NjhGNThFQzA3QTVFMTVCNUJFNUU0RDIzRTVFQkM2MEI3RTczRjI5MA==
che è uguale all'esempio datomi solo per i primi 37 caratteri

E' normale che non mi si dica di usare l'algoritmo Base64? E' così ovvio?
Come mai ottengo una stringa più lunga di quella corretta?

grazie mille

Fatti pagare per giocare a Poker On-Line
http:\\www.rakebackitalia.net

luigidibiasi Profilo | Guru

Ciao,

>E' normale che non mi si dica di usare l'algoritmo Base64? E'
>così ovvio?

forse le specifiche di http prevedono quella codifica perciò non ti è stato detto.

>Come mai ottengo una stringa più lunga di quella corretta?
Magari l'hash generato viene troncato ad un determinato numero di bit.

>
>grazie mille
>

>

Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

Cuky Profilo | Newbie

La funzione che utilizzo per fare l'hash è la seguente:

public static string OttieniStringaCodificaSHA1(string input)
{
//ASCIIEncoding enc = new ASCIIEncoding();
UTF8Encoding enc = new UTF8Encoding();

byte[] data = enc.GetBytes(input);
byte[] result;

SHA1 sha = new SHA1CryptoServiceProvider();
// This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data);

string hexString = string.Empty;

for (int i = 0; i < 13; i++)
{
hexString += result[i].ToString("X");
}

return hexString;

}

Ho seguito il tuo consiglio e ho provato a spezzare la sequenza. Nell'esempio sopra utilizzo i primi 13 byte anzichè tutta la sequenza di byte.
Ottengo questo:

stringa corretta: NjhGNThFQzA3QTVFMTVCNUJFNUU0RDIzRTVFQ==
stringa con 13 byte: NjhGNThFQzA3QTVFMTVCNUJFNUU0RDIzRTU=
stringa con 14 byte: NjhGNThFQzA3QTVFMTVCNUJFNUU0RDIzRTVFQg==

Mi sto avvicinando... cosa dovrei fare? spezzare il 14esimo byte? hai idea di come fare per raggiungere la stringa corretta?

grazie mille





Fatti pagare per giocare a Poker On-Line
http:\\www.rakebackitalia.net

luigidibiasi Profilo | Guru

No scusa,
intendevo dire che forse veniva usato un'altra funzione hash e non sha-1.

Ricordo (spero di ricordare bene) che esistono diverse varianti ognuna che va a spezzare l'hash ad un determinato numero di bit...

Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/
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