【发布时间】:2011-12-25 04:02:08
【问题描述】:
我正在将一些代码从 PHP 移植到 .NET(我不是 PHP 开发人员),除了以下行之外,这一切看起来都非常简单:
public function hash($message, $secret)
{
return base64_encode(hash_hmac('sha1', $message, $secret));
}
如何将此功能移植到 .NET?
base64编码是这样完成的,但是如何复制hash_hmac()呢?
Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(tmpString));
谢谢!
【问题讨论】:
-
.NET 版本的哈希值是否必须与 PHP 版本的哈希值相同,或者您可以随意使用任何哈希算法?
-
我希望您将其用作消息验证码,而不是用作密码哈希。 1 次迭代 HMAC 对于密码哈希来说太快了。
-
@CodeInChaos 我使用它作为 MAC 来签署 API 请求。我不确定您所说的“太快”是什么意思,因为它在内部使用普通的 SHA1 散列 - 这是散列密码的标准,那么为什么出于兴趣而不能为此目的工作呢?此外,这是散列,而不是加密,所以它太快的事实似乎无关紧要,除非我错过了什么。
-
将其用作 MAC 时,速度很快就可以了。当散列密码快速时不好,因为它使蛮力更快。这就是为什么使用减慢哈希的原因,例如 PBKDF2,它基本上是迭代的 HMAC,或 bcrypt。
-
另外,你的php代码不是base64编码的十六进制字符串吗?
标签: php asp.net encryption hash cryptography