2012-09-19 25 views
7

WinRT'de basit bir tek yönlü SHA-256 hash yaratmaya gittim ve işe yaramadığını fark ettim. Bir doğrulama yaptım ve görünüşte bu var: mscorlib içindeWinRT'de SHA-256 karmaları nasıl oluşturulur?

◦API System.Security.Cryptography.SHA256Managed, PublicKeyToken = b77a5c561934e089 bu uygulama türü için desteklenmiyor. CryptoWinRT.exe bu API'yi çağırır. MSCORLIB, PUBLICKEYTOKEN = B77A5C561934E089'daki .SAPI System.Security.Cryptography.HashAlgorithm bu uygulama için desteklenmiyor tür. CryptoWinRT.exe bu API'yi çağırır. CAPI System.Security.Cryptography.SHA256Managed. # Ctor MSCORLIB, PUBLICKEYTOKEN = B77A5C561934E089 bu uygulama için desteklenmiyor tür. CryptoWinRT.exe bu API'yi çağırır. CAPI System.Security.Cryptography.HashAlgorithm.ComputeHash (System.Byte []) MSCORLIB içinde , PUBLICKEYTOKEN = B77A5C561934E089 bu uygulama türü için desteklenmez. CryptoWinRT.exe bu API'yi çağırır.

Bunun için ne var? Ve neden böyle bir önemsiz şey WinRT'de izin verilmez?

+0

Yinelenen [I C++ WinRT bir SHA512 karma işlemini nasıl?] (http://stackoverflow.com/questions/12355417/how-do-i-perform-a-sha512-hash-in- c-winrt) (Farklı karma algoritması, ancak cevap aynıdır.) –

cevap

17

Bu sizin için çalışıyor mu? arasında

private void HandleHashClick(object sender, RoutedEventArgs e) 
    { 
     // get the text... 
     var inputText = this.textInput.Text; 

     // put the string in a buffer, UTF-8 encoded... 
     IBuffer input = CryptographicBuffer.ConvertStringToBinary(inputText, 
      BinaryStringEncoding.Utf8); 

     // hash it... 
     var hasher = HashAlgorithmProvider.OpenAlgorithm("SHA256"); 
     IBuffer hashed = hasher.HashData(input); 

     // format it... 
     this.textBase64.Text = CryptographicBuffer.EncodeToBase64String(hashed); 
     this.textHex.Text = CryptographicBuffer.EncodeToHexString(hashed); 
    } 
+0

Aslında bu neredeyse tam olarak bitti. Buraya hiç gelmedim ve bir cevap yazdım – Earlz