给出以下c#代码。
public static string HashSHA512( string phrase )
{
if( m_SHA512HashProvider == null )
m_SHA512HashProvider = new SHA512CryptoServiceProvider();
if ( m_HashBuffer == null )
m_HashBuffer = new byte[512];
int length = Encoding.ASCII.GetBytes( phrase, 0, phrase.Length > 512 ? 512 : phrase.Length, m_HashBuffer, 0 );
byte[] hashed = m_SHA512HashProvider.ComputeHash( m_HashBuffer, 0, length );
return BitConverter.ToString( hashed );
}
以及以下nodejs代码
generate: function(input, cb){
var hash = Crypto.createHash('sha512').update(input).digest('hex');
console.log('crypto generate:', hash);
return cb(hash);
},
我的哈希不匹配。如何更改任何一方以使它们相应匹配?
答案 0 :(得分:2)
您的C#代码中存在多个错误 比较以下内容并尝试确定故障的确切位置。
public static string HashSHA512( string phrase )
{
if( m_SHA512HashProvider == null )
m_SHA512HashProvider = new SHA512CryptoServiceProvider();
byte[] hashed = m_SHA512HashProvider.ComputeHash(Encoding.UTF8.GetBytes(phrase)); // or ASCII if that's sufficient for you input data.
return BitConverter.ToString( hashed );
}
一些提示:
UTF8
代替ASCII
(某些字符可能会被截断)GetBytes
不会返回任何内容。它返回一个字节数组。ComputeHash
没有out
或ref
参数,因为m_HashBuffer
不包含任何内容,如果m_HashBuffer
为空,则始终计算哈希值什么都没有。 修改强>
看一下node.js API,似乎在C#中你需要做一个额外的步骤:
return BitConverter.ToString(hashed).Replace("-", "").ToLower();
这是因为digest
方法不添加连字符,所有字符都是小写。
免责声明:未对代码进行测试。