NSData Sha512 散列与 Xamarin

问题描述

我有两个 NSData 对象的 SHA512 哈希示例(Objective-C) Objective C SHA512 hash of two NSData 这是在目标 C 中,使用 CommonCrypto,但是我尝试使用 SHA512Managed 类做同样的事情,但无法获得相同的结果。

PS:我希望能够散列 2 个 NSData 对象而不是字符串。

有没有什么办法可以用C#来做到这一点?

对于 Xamarin.iOS,CC_SHA512_Update 和 CC_SHA512_Final 的等价物是什么?

解决方法

您可以使用字符串创建 NSData

        SHA512 shaM = new SHA512Managed();
        byte[] data = shaM.ComputeHash(Encoding.UTF8.GetBytes(""));

        StringBuilder sBuilder = new StringBuilder();

        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }

        string stringyHash = sBuilder.ToString();

        NSData dataStr = NSData.FromString(stringyHash,NSStringEncoding.UTF8);
,

我想,我找到了答案: 重现与我的问题中提到的本机代码相同的输出 我会使用以下方法:

   public NSData SHA512HashWithSalt(NSData contentData,NSData saltData)
    {
        HashAlgorithm algorithm = new SHA256Managed();

        //Convert NSData to array of bytes
        byte[] salt = saltData.ToArray();
        byte[] content = contentData.ToArray();

        byte[] plainTextWithSaltBytes =
          new byte[content.Length + salt.Length];

        for (int i = 0; i < content.Length; i++)
        {
            plainTextWithSaltBytes[i] = content[i];
        }
        for (int i = 0; i < salt.Length; i++)
        {
            plainTextWithSaltBytes[content.Length + i] = salt[i];
        }

        return NSData.FromArray(algorithm.ComputeHash(plainTextWithSaltBytes));
    }