2012-04-05 12 views
5

Attualmente sto lavorando a un progetto per convertire un programma Python 3.2 in C#.Che cos'è un equivalente in C# di hexdigest in Python 3.2?

Nel programma python c'è una riga di codice che restituisce un oggetto stringa di doppia lunghezza, contenente solo cifre esadecimali.

Il bit di codice nel programma Python è:

if sha1.hexdigest().upper() == hash_string: 
    #do whatever 

Ho cercato e non riuscendo a trovare un equivalente in C# di hexdigest dal hashlib in pitone.

In C# Ho già ottenuto l'hash SHA1 in un array di byte, ma tutti i metodi che ho provato a eseguire un equivalente di hexdigest non sono riusciti a fornire una corrispondenza con hash_string - che è ciò che è l'esadecimale di sha1 corrisponde alla corrispondenza.

Non sono sicuro che il problema sia il metodo che uso per emulare hexdigest o il metodo che utilizzo per generare l'hash sha1 in primo luogo, quindi sarebbe fantastico se qualcuno avesse un metodo esadecimale che loro sa funziona in modo tale da consentire di eliminare almeno una possibile causa del problema.

Il metodo che sto utilizzando in questo momento al posto di hexdigest è:

string hexaHash = ""; 
foreach (byte b in sha1result) 
{ 
    hexaHash += String.Format("{0:x2}", b); 
} 
string result = hexaHash; 

EDIT: facepalm va bene, ho solo lavorato fuori che cosa il mio problema era. Quando si generava l'hash sha1 nel python lo faceva da una stringa esadecimale di minuscolo. Nel mio C# era una stringa esadecimale maiuscola. Quindi immagino che l'equivalente più esadecimale che sto usando sia buono così com'è. Scusa per aver sprecato il tempo delle persone.

+1

sempre quando le stringhe confronta provenienti da sistemi esterni assicurano entrambi sono in maiuscolo, poiché caso potrebbe essere modificata casualmente nel sistema esterno e il codice fallirà, così sempre fare 'localValue.ToUpper() == externalValue.ToUpper () ' – sll

+1

Dup - http://stackoverflow.com/questions/3899644/convert-python-to-c-sharp –

risposta

3

Utilizzare la classe HMACSHA1 per convertirlo.

+1

un po 'di codice sarebbe bello ... carino per favore! – noelicus

2
var hmac = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();