2016-07-31 25 views
1

In Windows Phone 8 konnte ich so etwas wie dies tun:SHA1-Hash nicht das gleiche zwischen Windows Phone 8.1 App und UWP App

SHA1Managed s = new SHA1Managed(); 
UTF8Encoding enc = new UTF8Encoding(); 
s.ComputeHash(enc.GetBytes(password.ToCharArray())); 
string hash = BitConverter.ToString(s.Hash).Replace("-", "").ToLower(); 

Für UWP App ich tue:

IBuffer buffUtf8Msg = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf8); 

HashAlgorithmProvider objAlgProv = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1); 

IBuffer buffHash = objAlgProv.HashData(buffUtf8Msg); 

if (buffHash.Length != objAlgProv.HashLength) 
{ 
    throw new Exception("There was an error creating the hash"); 
} 

string strHashBase64 = CryptographicBuffer.EncodeToBase64String(buffHash); 

string hash = strHashBase64.Replace("-", "").ToLower(); 

Ich bekomme nicht das gleiche Ergebnis.

Zum Beispiel, wenn ich den Text "Windows 8" hätte, würde ich bekommen

6517856f8c3a3fda3ae28305a05d127f0e1bdb97 (Windows Phone 8.1)

und

zrefb4w6p9o64omfof0sfw4b25c= (UWP)

ich nicht ganz weiß was ich falsch mache. Das Ziel ist, nur den SHA1-Hash einer Zeichenfolge zu erhalten.

+1

Ersetzen Sie "EncodeToBase64String" durch "EncodeToHexString", dann erhalten Sie das gleiche Ergebnis. –

Antwort

3

statt Codierung unter UWP-Code base64 (CryptographicBuffer.EncodeToBase64String(buffHash)), werden Sie wahrscheinlich in hexadezimale kodieren möchten mit:

string strHex = CryptographicBuffer.EncodeToHexString(buffHash); 
string hash = strHex.ToLower(); 

So Ihre beiden Windows Phone 8-Code und UWP-Code wird die gleiche Leistung erzeugen (hexekodiert SHA1).