2016-11-11 34 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时要求的)。问题是散列本身是二进制数据,所以要显示它,你需要对字符串进行一些转换。你会看到两种常用的方法来实现这一点,都使用相同的基础散列。