使用.Net生成SHA256哈希并反应本机库(相同输入)的不同结果

时间:2017-09-06 12:54:32

标签: c# react-native sha256

在.Net中我以这种方式生成哈希:

Convert.ToBase64String(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes("123456")));

结果是:" jZae727K08KaOmKSgOaGzww / XVqGr / PKEgIMkjrcbJI ="

现在我使用此library在React Native应用中生成哈希:

import { sha256 } from 'react-native-sha256';
return await sha256('123456');

结果是:" 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"

不确定我做错了什么......

修改

最终解决方案(感谢Martin Backasch):

var inputBytes = Encoding.UTF8.GetBytes("123456");
var hashBytes = SHA256.Create().ComputeHash(inputBytes);
return BitConverter.ToString(hashBytes).Replace("-", string.Empty).ToLower();

1 个答案:

答案 0 :(得分:3)

图书馆的结果是HEX。 您必须将其转换为Base64

试试here

输入:

"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"

输出:

"jZae727K08KaOmKSgOaGzww/XVqGr/PKEgIMkjrcbJI="

您可以使用microsoft提供的示例或快速代码段将您的C#结果从Base64转换为HEX

var yourResult = Convert.ToBase64String(SHA256.Create()
                                              .ComputeHash(Encoding.UTF8
                                                                   .GetBytes("123456")));

var apiResult = "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92";

var yourHexResult = BitConverter.ToString(Convert.FromBase64String(yourResult))
                                .Replace("-", string.Empty)
                                .ToLower();

Debug.Assert(yourHexResult == apiResult, "yourHexResult != apiResult");