问题描述
我有两个 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));
}