2016-11-11 37 views
2

我有一個Xamarin Forms XAML便攜式項目。我需要從字符串中獲取SHA256。我使用PCLCrypto來查找我的散列,因爲System.Security.Cryptography在PCL中不存在。Xamarin PCLCrypto SHA256給出不同的散列

我從API獲取sha256來比較值。這是我用來獲取SHA256哈希的方法:

private string getSha256(string data) { 
      byte[] byteData = Encoding.UTF8.GetBytes(data); 
      var hasher = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Sha256); 
      byte[] hash = hasher.HashData(byteData); 
      string hashBase64 = Convert.ToBase64String(hash); 
      return hashBase64; 
     } 

我使用的字符串是'祕密'。我用這個來檢查它:

http://www.xorbin.com/tools/sha256-hash-calculator ,它給:

2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b 

但我發現了兩個不同的散列碼:

API哈希: 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b

PCLCrypto哈希我生成: K7gNU3sdo + OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols =

它是相同的字符串'祕密',但導致不同的哈希值。我也注意到PCLCrypto散列總是以'='結尾。

他們爲什麼不同?

回答

1

如果您使用的轉換器如http://hash.online-convert.com/sha256-generator您會看到兩個哈希值相同(在文本框中輸入'secret'並單擊Convert File(轉換文件))。

'2bb80 ...'字符串是散列的十六進制編碼,'K7gNU ...'字符串是散列的base64編碼(這是您在調用PCLCrypto時要求的)。問題是散列本身是二進制數據,所以要顯示它,你需要對字符串進行一些轉換。你會看到兩種常用的方法來實現這一點,都使用相同的基礎散列。