일부 텍스트를 해시하는 데 16 진수와 함께 SHA-256을 사용하고 있습니다. 그러나 내 Node 구현의 해시 된 텍스트가 .NET C# 구현과 다릅니다. NodeJS에서SHA-256 NodeJS 대 .NET C#
나는 다음과 같은 한 :
return crypto.createHash('sha256').update(text).digest('hex');
및 .NET의 C#에서
나는이 :private static string Hash(string text)
{
byte[] bytes = Encoding.Unicode.GetBytes(text);
using (var generator = new SHA256Managed())
{
byte[] hash = generator.ComputeHash(bytes);
return BytesToHex(hash);
}
}
private static string BytesToHex(byte[] bytes)
{
var hex = new StringBuilder(bytes.Length * 2);
foreach (byte b in bytes)
{
hex.AppendFormat("{0:x2}", b);
}
return hex.ToString();
}
return Hash(text);
은 내가 NodeJS 버전에서 잘못된 무슨 짓을 한거야?
즉, .NET 응용 프로그램에서 만든 해시로 NodeJS 응용 프로그램을 사용하려고하면 해시가 일치하지 않습니다.
업데이트 :
return crypto.createHash('sha256').update(text, 'utf8').digest('hex');
그러나 해시는 이전과 동일합니다 : 분명히이
그래서 나는 시도 ... 캐릭터 세트에 의한 될 수 있을까? 따라서 바이너리 대신에 utf8을 사용하여 실제로 반환 된 해시에 아무런 차이가 없으며 .NET 버전과 여전히 일치하지 않습니다.
일부 텍스트를 포함한 실행 가능한 repro를 게시하십시오. – usr
FWIW [업데이트] (http://nodejs.org/api/crypto.html#crypto_hash_update_data_input_encoding)/[다이제스트] (http://nodejs.org/api/crypto.html#crypto_hash_digest_encoding)는 기존 방법이므로, ([해시] (http://nodejs.org/api/crypto.html#crypto_class_hash)가 다이제스트를 내부적으로 수행합니다). – James