C#模拟php crypt

时间:2015-09-08 09:56:55

标签: c# crypt

我需要用另一种软件理解的方式用C#散列密码。 最初php的crypt功能正在这样做。它具有以下输出

$6$rounds=1000$1f$yeKGQo0b8MqqMpocFla8uKLE6GOpEygSQUH4qMi4msJZsD50Eh00bU4GwoGGPEeLMdG6C17ehl/l8SrcOABdC0

我猜是SHA512。 。如何使用C#

实现php的crypt功能

原始php

$salt = '$6$rounds=1000$'.dechex(rand(0,15)).dechex(rand(0,15)).'$';
$crypted = crypt($password, $salt);

1 个答案:

答案 0 :(得分:0)

CryptSharp计算所有常见的隐藏变体。

生成SHA-512盐渍哈希(此算法的默认轮数为5000):

using CryptSharp;
string hash = Crypter.SHA512.Crypt(password);

使用自定义数量的轮次:

var saltOptions = new CrypterOptions() { { CrypterOption.Rounds, 10000 } };
string salt = Crypter.SHA512.GenerateSalt(saltOptions);
string hash = Crypter.SHA512.Crypt(password, saltOptions);

验证哈希:

bool matched = Crypter.CheckPassword(testPassword, hash);

另一方面,原始的PHP确实应该是安全的。 salt只有8位并且使用rand生成(使用openssl_random_pseudo_bytes代替)。哈希特别选择默认轮数的五分之一。